Изтрийте всичко в Redis

1. Общ преглед

Когато кеширате в Redis, може да е полезно да изчистите целия кеш, когато стане невалиден.

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

Първо ще разгледаме командния ред. След това ще видим как да постигнем същото, като използваме API и Java клиента.

2. Стартиране на Redis

Ще ни трябва инсталация на Redis, за да работим. В краткия старт на Redis има инструкции за инсталиране за Mac и Linux. Вероятно е по-лесно да стартирате Redis в докер.

Нека започнем тестов сървър 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 и FLUSHALL . Можем да използваме Redis CLI за изпълнение на тези команди.

Командата FLUSHDB изтрива ключовете в база данни. А командата FLUSHALL изтрива всички ключове във всички бази данни.

Можем да изпълняваме тези операции във фонова нишка, като използваме опцията ASYNC . Това е полезно, ако промиването отнема много време, тъй като командата ASYNC спира блокирането му, докато завърши.

Трябва да отбележим, че опцията ASYNC се предлага от Redis 4.0.0.

4. Работа с Java Client

Сега да видим как да използваме Jedis Java клиент за изтриване на ключове.

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

Първо ще трябва да добавим зависимостта Maven за джедаите:

 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 ще изчисти само текущата база данни . За да изчистим всички бази данни, използваме метода flushAll :

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 и как да използваме командите за изчистване, за да изчистим една или повече от тях.

Както винаги, изходният код за тази статия е достъпен в GitHub.