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

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

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

Начать курс

Redis клиент для Java: Jedis, Lettuce и Redisson — подробное руководство

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

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

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

Подключение зависимости (Maven)

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>5.1.0</version>
</dependency>

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

import redis.clients.jedis.Jedis;

public class JedisExample {
    public static void main(String[] args) {
        // Подключение к Redis (по умолчанию localhost:6379)
        try (Jedis jedis = new Jedis("localhost", 6379)) {
            // Аутентификация (если задан пароль)
            // jedis.auth("password");

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

            // Работа с хэшами
            jedis.hset("user:200", "name", "Bob");
            jedis.hset("user:200", "age", "30");
            String name = jedis.hget("user:200", "name");
            System.out.println("Name: " + name); // Name: Bob

            // Установка TTL (время жизни ключа)
            jedis.expire("user:100", 60); // Ключ живёт 60 секунд
        }
    }
}

Плюсы и минусы Jedis

  • Плюсы: минимальный порог входа, лёгкий вес, полная поддержка команд Redis.
  • Минусы: не потокобезопасен (нужен пул соединений), нет асинхронного API, нет встроенной поддержки распределённых структур данных.

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

Lettuce — это современный, потокобезопасный Redis клиент, построенный на Netty. Он поддерживает синхронное, асинхронное и реактивное (Reactive Streams) программирование. Lettuce идеально подходит для высоконагруженных и асинхронных приложений на Java 8+.

Подключение зависимости (Maven)

<dependency>
    <groupId>io.lettuce</groupId>
    <artifactId>lettuce-core</artifactId>
    <version>6.3.1.RELEASE</version>
</dependency>

Пример: асинхронное подключение

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

import java.util.concurrent.CompletableFuture;

public class LettuceAsyncExample {
    public static void main(String[] args) {
        // Создаём клиент
        RedisClient redisClient = RedisClient.create("redis://localhost:6379");
        
        // Открываем соединение
        try (StatefulRedisConnection<String, String> connection = redisClient.connect()) {
            RedisAsyncCommands<String, String> async = connection.async();
            
            // Асинхронная установка значения
            CompletableFuture<String> setFuture = async.set("key:1", "Hello from Lettuce!").toCompletableFuture();
            
            // Асинхронное получение значения
            CompletableFuture<String> getFuture = setFuture.thenCompose(result -> 
                async.get("key:1").toCompletableFuture()
            );
            
            // Вывод результата
            getFuture.thenAccept(value -> System.out.println("Value: " + value));
            
            // Ждём завершения (для демонстрации)
            getFuture.join();
        }
        redisClient.shutdown();
    }
}

Плюсы и минусы Lettuce

  • Плюсы: потокобезопасен, поддерживает асинхронность и реактивность, автоматическое переподключение, поддержка Sentinel и Cluster.
  • Минусы: более сложный API по сравнению с Jedis, требует понимания асинхронного программирования.

3. Redisson — продвинутый клиент с распределёнными объектами

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