Verwijder alles in Redis

1. Overzicht

Bij het cachen in Redis kan het handig zijn om de hele cache te wissen wanneer deze ongeldig wordt.

In deze korte tutorial leren we hoe we alle sleutels die aanwezig zijn in Redis kunnen verwijderen, zowel in specifieke databases als in alle databases.

Eerst kijken we naar de opdrachtregel. Vervolgens zullen we zien hoe u hetzelfde kunt bereiken met behulp van de API's en de Java-client.

2. Redis uitvoeren

We hebben een installatie van Redis nodig om mee te werken. Er zijn installatie-instructies voor Mac en Linux in de Redis-snelstartgids. Het is waarschijnlijk gemakkelijker om Redis in Docker uit te voeren.

Laten we een test Redis-server starten:

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

En we kunnen rennen redis-cli om te testen of deze server werkt:

docker exec -it redis redis-cli

Dit laat ons vallen in de cli-shell, waar het commando ping zal testen of de server actief is:

127.0.0.1:6379> ping PONG

We verlaten het redis-cli met CTRL + C.

3. Redis-opdrachten

Laten we beginnen met de Redis-opdrachten om alles te verwijderen.

Er zijn twee belangrijke opdrachten om de sleutels in Redis te verwijderen: SPOELENB en SPOELEN. We kunnen de Redis CLI gebruiken om deze opdrachten uit te voeren.

De SPOELENB commando verwijdert de sleutels in een database. En de SPOELEN commando verwijdert alle sleutels in alle databases.

We kunnen deze bewerkingen uitvoeren in een achtergrondthread met behulp van de ASYNC keuze. Dit is handig als het doorspoelen lang duurt, net als het maken van de opdracht ASYNC stopt het blokkeren totdat het is voltooid.

We moeten opmerken dat de ASYNC optie is beschikbaar vanaf Redis 4.0.0.

4. Werken met de Java Client

Laten we nu eens kijken hoe we de Jedis Java-client kunnen gebruiken voor het verwijderen van sleutels.

4.1. Afhankelijkheden

Eerst moeten we de Maven-afhankelijkheid voor Jedis toevoegen:

 redis.clients jedis 3.3.0 

Laten we, om het testen gemakkelijker te maken, ook een ingesloten Redis-server gebruiken:

 com.github.kstyrc embedded-redis 0.6 

4.2. Een ingesloten redis starten

We zullen een ingesloten Redis-server maken om mee te testen, door deze op een beschikbare poort uit te voeren:

RedisService redisServer = nieuwe RedisServer (poort);

Onze Jedis-client wordt dan gemaakt met localhost als de hostnaam en dezelfde poort:

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

5. Een enkele database doorspoelen

Laten we wat gegevens in de database plaatsen en controleren of ze worden onthouden:

String key = "key"; Stringwaarde = "waarde"; jedis.set (sleutel, waarde); String ontvangen = jedis.get (key); assertEquals (waarde, ontvangen);

Laten we nu spoel de database door met de flushDB methode:

jedis.flushDB (); assertNull (jedis.get (key));

Zoals we kunnen zien, komt een poging om de waarde op te halen na het doorspoelen terug nul.

6. Alle databases wissen

Redis biedt meerdere databases, die genummerd zijn. We kunnen gegevens aan verschillende databases toevoegen door de selecteer opdracht voordat we onze waarden toevoegen:

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

We zouden nu één sleutel moeten hebben in elk van onze twee databases:

jedis.select (0); assertEquals ("waarde1", jedis.get ("key1")); assertNull (jedis.get ("key2")); jedis.select (1); assertEquals ("waarde2", jedis.get ("key2")); assertNull (jedis.get ("key1"));

De flushDB methode zal alleen de huidige database wissen. Om alle databases te wissen, gebruiken we de flushAll methode:

jedis.flushAll ();

We kunnen testen of dit heeft gewerkt:

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

7. Tijdscomplexiteit

Redis is een snelle gegevensopslag die goed schaalbaar is. Doorspoelen kan echter langer duren als er meer gegevens zijn.

De tijdcomplexiteit van de SPOELENB operatie is AAN), waar N is het aantal sleutels in de database. Als we de SPOELEN commando, de tijdcomplexiteit is opnieuw AAN), maar hier, N is het aantal sleutels in alle databases.

8. Conclusie

In dit artikel hebben we gezien hoe u Redis en het redis-cli in Docker, en hoe u de Jedis-client voor Java gebruikt met een ingebouwde Redis-server.

We hebben gezien hoe we gegevens in verschillende Redis-databases kunnen bewaren en hoe we de doorspoelopdrachten kunnen gebruiken om een ​​of meer ervan te wissen.

Zoals altijd is de broncode voor dit artikel beschikbaar op GitHub.