Рубрики
Без рубрики

Удалить все красным-это

Возможно, нам потребуется очистить кэш Redis, когда его данные устареют. Мы рассмотрим, как это сделать как с помощью командной строки, так и с помощью Java-клиента.

Автор оригинала: Vivek Balasubramaniam.

1. Обзор

При кэшировании в Redis может быть полезно очистить весь кэш, когда он становится недействительным.

В этом коротком уроке мы узнаем, как удалить все ключи, присутствующие в Redis, как в конкретных базах данных, так и во всех базах данных.

Сначала мы рассмотрим командную строку. Затем мы посмотрим, как сделать то же самое с помощью API и Java-клиента.

2. Запуск Redis

Для работы нам понадобится установка Redis. Инструкции по установке для Mac и Linux содержатся в разделе Redis quick start . Вероятно, проще запустить Redis в docker.

Давайте запустим тестовый сервер Redis:

docker run --name redis -p 6379:6379 -d redis:latest

И мы можем запустить redis-cli , чтобы проверить, работает ли этот сервер:

docker exec -it redis redis-cli

Это приведет нас в оболочку cli, где команда ping проверит, работает ли сервер:

127.0.0.1:6379> ping
PONG

Мы выходим из redis-cli с помощью CTRL+C.

3. Команды Redis

Давайте начнем с команд Redis, чтобы удалить все.

Есть две основные команды для удаления ключей, присутствующих в Redis: FLUSHDB и FLUSH ALL . Мы можем использовать CLI Redis для выполнения этих команд.

Команда FLUSHDB удаляет ключи в базе данных. И команда FLUSHALL удаляет все ключи во всех базах данных.

Мы можем выполнять эти операции в фоновом потоке, используя параметр ASYNC . Это полезно, если сброс занимает много времени, так как выполнение команды ASYNC останавливает ее блокировку до тех пор, пока она не будет завершена.

Следует отметить, что опция ASYNC доступна в Redis 4.0.0.

4. Работа с Java-клиентом

Теперь давайте посмотрим, как использовать Java-клиент Jedis для удаления ключей.

4.1. Зависимости

Во-первых, нам нужно будет добавить зависимость Maven для Jedis :


    redis.clients
    jedis
    3.3.0

Чтобы упростить тестирование, давайте также используем встроенный сервер Redis :


    com.github.kstyrc
    embedded-redis
    0.6

4.2. Запуск встроенного Redis

Мы создадим встроенный сервер Redis для тестирования, запустив его на доступном порту:

RedisService redisServer = new RedisServer(port);

Затем создается наш клиент Jedis с именем хоста localhost и тем же портом:

Jedis jedis = new Jedis("localhost", port);

5. Очистка единой базы данных

Давайте внесем некоторые данные в базу данных и проверим, что они запоминаются:

String key = "key";
String value = "value";
jedis.set(key, value);
String received = jedis.get(key);
 
assertEquals(value, received);

Теперь давайте очистим базу данных с помощью метода flushDB :

jedis.flushDB();

assertNull(jedis.get(key));

Как мы видим, попытка получить значение после промывки возвращает null .

6. Очистка Всех Баз Данных

Redis предоставляет несколько баз данных, которые пронумерованы. Мы можем добавлять данные в различные базы данных с помощью команды select | перед добавлением наших значений:

jedis.select(0);
jedis.set("key1", "value1");
jedis.select(1);
jedis.set("key2", "value2");

Теперь у нас должен быть один ключ в каждой из наших двух баз данных:

jedis.select(0);
assertEquals("value1", jedis.get("key1"));
assertNull(jedis.get("key2"));

jedis.select(1);
assertEquals("value2", jedis.get("key2"));
assertNull(jedis.get("key1"));

Метод flushDB очистит только текущую базу данных . Чтобы очистить все базы данных, мы используем метод flush All :

jedis.flushAll();

Мы можем проверить, сработало ли это:

jedis.select(0);
 
assertNull(jedis.get("key1"));
assertNull(jedis.get("key2"));
 
jedis.select(1);
 
assertNull(jedis.get("key1"));
assertNull(jedis.get("key2"));

7. Временная Сложность

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

временная сложность операции FLUSHDB равна O(N) , где N – количество ключей в базе данных. Если мы используем команду FLUSHALL , временная сложность снова будет O(N) , но здесь N – это количество ключей во всех базах данных.

8. Заключение

В этой статье мы рассмотрели, как запустить Redis и redis-cli в Docker, а также как использовать клиент Jedis для Java со встроенным сервером Redis.

Мы рассмотрели, как хранить данные в разных базах данных Redis и как использовать команды flush для очистки одной или нескольких из них.

Как всегда, исходный код этой статьи доступен на GitHub .