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, требует понимания асинхронного программирования.