Что такое Jedis и зачем он нужен?
Jedis — это минималистичная, легковесная и очень популярная Java-библиотека для работы с Redis (Remote Dictionary Server). Redis — это высокопроизводительное хранилище данных в памяти, которое часто используется как база данных, кэш и брокер сообщений. Jedis предоставляет простой и интуитивно понятный API для взаимодействия с Redis-сервером из Java-приложений.
Зачем нужен Jedis? Если ваше Java-приложение использует Redis для кэширования, управления сессиями, очередей задач или хранения временных данных, Jedis — это самый прямой и эффективный способ подключиться к Redis. Он поддерживает все основные структуры данных Redis (строки, списки, множества, хэши, отсортированные множества), а также такие функции, как Pub/Sub, транзакции и Lua-скрипты.
Jedis известен своей простотой и отсутствием лишних зависимостей. В отличие от более тяжеловесных клиентов (например, Lettuce), Jedis не требует настройки пула соединений из коробки (хотя поддерживает его), что делает его идеальным выбором для небольших и средних проектов, где важна простота и скорость разработки.
Установка Jedis
Jedis распространяется через Maven Central. Для добавления библиотеки в ваш проект вам нужно добавить зависимость в файл pom.xml (для Maven) или build.gradle (для Gradle).
Установка через Maven
Добавьте следующий блок в ваш pom.xml:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>5.1.0</version> <!-- Используйте последнюю стабильную версию -->
</dependency>
Установка через Gradle
Добавьте строку в ваш build.gradle:
implementation 'redis.clients:jedis:5.1.0'
Важно: Версия 5.x — это последнее крупное обновление Jedis, которое включает поддержку Redis 7.x и новые возможности. Рекомендуется всегда использовать последнюю стабильную версию, чтобы получить все исправления и новые функции.
Быстрый старт с примером кода
Давайте напишем простую программу, которая подключается к Redis, сохраняет значение и читает его обратно.
Предположим, что Redis-сервер запущен локально на стандартном порту 6379.
import redis.clients.jedis.Jedis;
public class JedisQuickStart {
public static void main(String[] args) {
// 1. Создаем подключение к Redis
// По умолчанию localhost:6379
try (Jedis jedis = new Jedis("localhost", 6379)) {
// 2. Проверяем соединение (PING)
String response = jedis.ping();
System.out.println("Ping response: " + response); // Должно быть "PONG"
// 3. Сохраняем значение
jedis.set("user:1000:name", "Alice");
jedis.set("user:1000:age", "30");
// 4. Читаем значение
String name = jedis.get("user:1000:name");
String age = jedis.get("user:1000:age");
System.out.println("User name: " + name);
System.out.println("User age: " + age);
// 5. Проверяем существование ключа
boolean exists = jedis.exists("user:1000:name");
System.out.println("Key exists: " + exists);
// 6. Удаляем ключ
long deleted = jedis.del("user:1000:age");
System.out.println("Deleted keys: " + deleted);
}
}
}
Этот пример демонстрирует базовую работу: подключение, запись, чтение, проверку существования и удаление. Обратите внимание на использование try-with-resources — это гарантирует, что соединение будет закрыто после использования.
Основные методы Jedis
Jedis предоставляет сотни методов, покрывающих все возможности Redis. Ниже приведены 10 наиболее часто используемых методов с подробным описанием и примерами.
1. set(String key, String value)
Что делает: Устанавливает значение для указанного ключа. Если ключ уже существует, его значение перезаписывается.
Параметры:
key— ключ (String)value— значение (String)
Возвращает: String — всегда "OK" при успешной записи.
Пример:
jedis.set("greeting", "Hello, World!");
String result = jedis.get("greeting");
System.out.println(result); // Выведет: Hello, World!
2. get(String key)
Что делает: Получает значение по ключу. Если ключ не существует, возвращает null.
Параметры:
key— ключ (String)
Возвращает: String — значение ключа или null.
Пример:
String value = jedis.get("non_existent_key");
System.out.println(value); // Выведет: null
jedis.set("mykey", "myvalue");
value = jedis.get("mykey");
System.out.println(value); // Выведет: myvalue
3. exists(String key)
Что делает: Проверяет, существует ли указанный ключ в Redis.
Параметры:
key— ключ (String)
Возвращает: boolean — true, если ключ существует, иначе false.
Пример:
jedis.set("temp", "data");
boolean exists = jedis.exists("temp");
System.out.println(exists); // Выведет: true
exists = jedis.exists("missing");
System.out.println(exists); // Выведет: false
4. del(String... keys)
Что делает: Удаляет один или несколько ключей. Принимает переменное количество аргументов.
Параметры:
keys— один или несколько ключей (String...)
Возвращает: long — количество удаленных ключей.
Пример:
jedis.set("key1", "val1");
jedis.set("key2", "val2");
long deletedCount = jedis.del("key1", "key2");
System.out.println(deletedCount); // Выведет: 2
// Попытка удалить несуществующий ключ
deletedCount = jedis.del("non_existent");
System.out.println(deletedCount); // Выведет: 0
5. expire(String key, int seconds)
Что делает: Устанавливает время жизни (TTL) для ключа в секундах. После истечения времени ключ автоматически удаляется.
Параметры:
key— ключ (String)seconds— время жизни в секундах (int)
Возвращает: long — 1, если время жизни установлено успешно, 0, если ключ не существует.
Пример:
jedis.set("session:123", "active");
jedis.expire("session:123", 3600); // Ключ будет удален через 1 час
// Проверяем оставшееся время жизни
long ttl = jedis.ttl("session:123");
System.out.println("TTL: " + ttl + " seconds");
6. hset(String key, String field, String value)
Что делает: Устанавливает значение поля в хэше. Хэш — это структура данных, похожая на Java Map.
Параметры:
key— ключ хэша (String)field— поле внутри хэша (String)value— значение поля (String)
Возвращает: long — 1, если поле было создано, 0, если поле было обновлено.
Пример:
jedis.hset("user:1", "name", "Bob");
jedis.hset("user:1", "age", "25");
jedis.hset("user:1", "email", "bob@example.com");
// Получаем все поля хэша
Map<String, String> user = jedis.hgetAll("user:1");
System.out.println(user); // Выведет: {name=Bob, age=25, email=bob@example.com}
7. hget(String key, String field)
Что делает: Получает значение конкретного поля из хэша.
Параметры:
key— ключ хэша (String)field— поле внутри хэша (String)
Возвращает: String — значение поля или null, если поле не существует.
Пример:
String name = jedis.hget("user:1", "name");
System.out.println(name); // Выведет: Bob
String missing = jedis.hget("user:1", "phone");
System.out.println(missing); // Выведет: null
8. lpush(String key, String... values)
Что делает: Добавляет одно или несколько значений в начало списка. Список — это упорядоченная коллекция строк.
Параметры:
key— ключ списка (String)values— значения для добавления (String...)
Возвращает: long — длина списка после операции.
Пример:
jedis.lpush("queue", "task3", "task2", "task1");
// Список теперь: ["task1", "task2", "task3"]
// Получаем все элементы списка
List<String> tasks = jedis.lrange("queue", 0, -1);
System.out.println(tasks); // Выведет: [task1, task2, task3]
// Извлекаем первый элемент
String firstTask = jedis.lpop("queue");
System.out.println(firstTask); // Выведет: task1
9. sadd(String key, String... members)
Что делает: Добавляет один или несколько элементов в множество (Set). Множество — это неупорядоченная коллекция уникальных строк.
Параметры:
key— ключ множества (String)members— элементы для добавления (String...)
Возвращает: long — количество добавленных элементов (не считая уже существующих).
Пример:
jedis.sadd("tags:article:1", "java", "redis", "tutorial");
jedis.sadd("tags:article:1", "java"); // Дубликат не будет добавлен
// Получаем все элементы множества
Set<String> tags = jedis.smembers("tags:article:1");
System.out.println(tags); // Выведет: [java, redis, tutorial]
// Проверяем, существует ли элемент в множестве
boolean isMember = jedis.sismember("tags:article:1", "redis");
System.out.println(isMember); // Выведет: true
10. zadd(String key, double score, String member)
Что делает: Добавляет элемент в отсортированное множество (Sorted Set) с указанным весом (score). Элементы упорядочиваются по ве
Также в библиотеке
Стандартная библиотека C# (.NET): полный обзор
Работа с S3 и облачными хранилищами в Node.js: библиотека @aws-sdk/client-s3
Генерация PDF в Java: обзор лучших библиотек (iText, Apache PDFBox, OpenPDF)