Redis клиент для Java: Jedis, Lettuce и Redisson — обзор и примеры

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Redis клиент для Java: обзор популярных библиотек

Redis — это высокопроизводительное хранилище данных типа «ключ-значение», широко используемое для кэширования, сессий, очередей и real-time аналитики. Для работы с Redis из Java существует несколько зрелых клиентских библиотек. В этой статье мы рассмотрим три самых популярных: Jedis, Lettuce и Redisson. Каждая из них имеет свои особенности, преимущества и сценарии использования.

1. Jedis — простой и легковесный клиент

Jedis — это минималистичный синхронный клиент для Redis. Он прост в освоении, хорошо подходит для небольших проектов и микросервисов, где не требуется асинхронность.

Особенности Jedis:

  • Синхронное API (блокирующие вызовы).
  • Поддержка пула соединений (JedisPool).
  • Полная поддержка команд Redis.
  • Не поддерживает асинхронные или реактивные операции.

Пример подключения и базовых операций:

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

public class JedisExample {
    public static void main(String[] args) {
        // Создаём пул соединений
        try (JedisPool pool = new JedisPool("localhost", 6379);
             Jedis jedis = pool.getResource()) {

            // Установка и получение значения
            jedis.set("user:100", "Alice");
            String value = jedis.get("user:100");
            System.out.println("Value: " + value); // Вывод: Alice

            // Работа со списками
            jedis.lpush("queue", "task1");
            jedis.lpush("queue", "task2");
            String task = jedis.rpop("queue");
            System.out.println("Task from queue: " + task); // Вывод: task1
        }
    }
}

Когда выбрать Jedis:

  • Простой проект без реактивных требований.
  • Нужна минимальная зависимость (один jar).
  • Классические блокирующие операции.

2. Lettuce — асинхронный и реактивный клиент

Lettuce — это современный клиент, построенный на Netty. Он поддерживает синхронное, асинхронное и реактивное (Reactive Streams) API. Отлично подходит для высоконагруженных систем.

Особенности Lettuce:

  • Асинхронное и реактивное API (на основе Project Reactor).
  • Поддержка кластеров Redis, Sentinel, SSL.
  • Неблокирующие операции — высокая пропускная способность.
  • Поддержка Redis Pub/Sub, Streams, Transactions.

Пример асинхронного использования:

import io.lettuce.core.RedisClient;
import io.lettuce.core.api.StatefulRedisConnection;
import io.lettuce.core.api.async.RedisAsyncCommands;

public class LettuceAsyncExample {
    public static void main(String[] args) {
        RedisClient client = RedisClient.create("redis://localhost:6379");
        try (StatefulRedisConnection<String, String> connection = client.connect()) {
            RedisAsyncCommands<String, String> async = connection.async();

            // Асинхронная установка
            async.set("key:1", "Hello, Lettuce!");

            // Асинхронное получение с callback
            async.get("key:1").thenAccept(value -> 
                System.out.println("Received: " + value)
            );

            // Небольшая задержка для завершения асинхронной операции
            try { Thread.sleep(100); } catch (InterruptedException e) { }
        }
        client.shutdown();
    }
}

Когда выбрать Lettuce:

  • Высоконагруженные системы с большим количеством запросов.
  • Необходимость асинхронности или реактивного программирования.
  • Работа с кластером Redis или Sentinel.

3. Redisson — клиент с расширенными возможностями

Redisson — это не просто клиент, а полноценный фреймворк для работы с Redis. Он предоставляет Java-объекты (Distributed Map, Lock, Queue, Topic) поверх Redis, что делает его удобным для сложных распределённых приложений.

Особенности Redisson:

  • Поддержка распределённых коллекций (RMap, RSet, RList).
  • Распределённые блокировки (RLock) и синхронизаторы.
  • Очереди сообщений (RQueue, RBlockingQueue).
  • Поддержка реактивного API, синхронного и асинхронного.
  • Интеграция с Spring Boot (redisson-spring-boot-starter).

Пример использования распределённой карты и блокировки:

import org.redisson.Redisson;
import org.redisson.api.RLock;
import org.redisson.api.RMap;
import org.red                    

Рекомендаций