Slett alt i Redis

1. Oversikt

Når du lagrer hurtigbufring i Redis, kan det være nyttig å tømme hele hurtigbufferen når den blir ugyldig.

I denne korte opplæringen lærer vi hvordan du sletter alle nøklene i Redis, både i bestemte databaser og på tvers av alle databaser.

Først skal vi se på kommandolinjen. Så får vi se hvordan vi kan oppnå det samme ved hjelp av API-ene og Java-klienten.

2. Kjører Redis

Vi trenger en installasjon av Redis å jobbe med. Det er installasjonsinstruksjoner for Mac og Linux i Redis hurtigstart. Det er sannsynligvis lettere å kjøre Redis i docker.

La oss starte en test Redis-server:

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

Og vi kan løpe redis-cli for å teste at denne serveren fungerer:

docker execitit redis redis-cli

Dette slipper oss inn i cli-skallet, hvor kommandoen ping vil teste om serveren er oppe:

127.0.0.1:6379> ping PONG

Vi går ut av redis-cli med CTRL + C.

3. Redis-kommandoer

La oss starte med Redis-kommandoene for å slette alt.

Det er to hovedkommandoer for å slette tastene i Redis: FLUSHDB og FLUSHALL. Vi kan bruke Redis CLI til å utføre disse kommandoene.

De FLUSHDB kommandoen sletter nøklene i en database. Og FLUSHALL kommando sletter alle nøkler i alle databaser.

Vi kan utføre disse operasjonene i en bakgrunnstråd ved hjelp av ASYNC alternativ. Dette er nyttig hvis flush tar lang tid som kommando ASYNC hindrer at den blokkeres til den er fullført.

Vi bør merke oss at ASYNC alternativet er tilgjengelig fra Redis 4.0.0.

4. Arbeide med Java Client

La oss nå se hvordan du bruker Jedis Java-klienten for å slette nøkler.

4.1. Avhengigheter

Først må vi legge til Maven-avhengigheten for Jedis:

 redis.clients jedis 3.3.0 

For å gjøre testing enklere, la oss også bruke en innebygd Redis-server:

 com.github.kstyrc innebygd-redis 0.6 

4.2. Starte en innebygd Redis

Vi oppretter en innebygd Redis-server å teste med, ved å kjøre den på en tilgjengelig port:

RedisService redisServer = ny RedisServer (port);

Vår Jedis-klient blir deretter opprettet med lokal vert som vertsnavnet, og den samme porten:

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

5. Spyling av en enkelt database

La oss legge inn noen data i databasen og sjekke at de huskes:

Strengnøkkel = "nøkkel"; Strengverdi = "verdi"; jedis.set (nøkkel, verdi); Streng mottatt = jedis.get (nøkkel); assertEquals (verdi, mottatt);

La oss nå skyll databasen med flushDB metode:

jedis.flushDB (); assertNull (jedis.get (nøkkel));

Som vi kan se, returnerer forsøket på å hente verdien etter spyling null.

6. Slette alle databaser

Redis tilbyr flere databaser, som er nummererte. Vi kan legge til data i forskjellige databaser ved å bruke å velge kommando før vi legger til våre verdier:

jedis.select (0); jedis.set ("nøkkel1", "verdi1"); jedis.select (1); jedis.set ("key2", "value2");

Vi skal nå ha en nøkkel i hver av våre to databaser:

jedis.select (0); assertEquals ("verdi1", jedis.get ("nøkkel1")); assertNull (jedis.get ("key2")); jedis.select (1); assertEquals ("verdi2", jedis.get ("nøkkel2")); assertNull (jedis.get ("key1"));

De flushDB metoden vil bare fjerne gjeldende database. For å tømme alle databasene bruker vi flushAll metode:

jedis.flushAll ();

Vi kan teste at dette har fungert:

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

7. Tidskompleksitet

Redis er en rask datalager som skalerer godt. Flushoperasjoner kan imidlertid ta lengre tid når det er mer data.

Tidskompleksiteten til FLUSHDB operasjonen er PÅ), hvor N er antall nøkler i databasen. Hvis vi bruker FLUSHALL kommando, er tidskompleksiteten igjen PÅ), men her, N er antall nøkler i alle databaser.

8. Konklusjon

I denne artikkelen så vi hvordan du skal kjøre Redis og the redis-cli i Docker, og hvordan du bruker Jedis-klienten for Java med en innebygd Redis-server.

Vi så hvordan du lagrer data i forskjellige Redis-databaser og hvordan du bruker flush-kommandoene for å fjerne en eller flere av dem.

Som alltid er kildekoden for denne artikkelen tilgjengelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found