Redis Client (Jedis) для Java: полное руководство с примерами

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

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

Начать курс

Что такое 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). Элементы упорядочиваются по ве

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