Slet alt i Redis

1. Oversigt

Ved cache i Redis kan det være nyttigt at rydde hele cachen, når den bliver ugyldig.

I denne korte vejledning lærer vi, hvordan du sletter alle de nøgler, der findes i Redis, både i specifikke databaser og på tværs af alle databaser.

Først ser vi på kommandolinjen. Derefter ser vi, hvordan man opnår det samme ved hjælp af API'erne og Java-klienten.

2. Kører Redis

Vi har brug for en installation af Redis til at arbejde med. Der er installationsinstruktioner til Mac og Linux i Redis hurtigstart. Det er sandsynligvis lettere at køre Redis i docker.

Lad os starte en test Redis-server:

docker-kørsel - navn redis -p 6379: 6379 -d redis: seneste

Og vi kan løbe redis-cli for at teste, at denne server fungerer:

docker udfører -it redis redis-cli

Dette falder os ind i cli shell, hvor kommandoen ping vil teste, om serveren er oppe:

127.0.0.1:6379> ping PONG

Vi forlader redis-cli med CTRL + C.

3. Redis-kommandoer

Lad os starte med Redis-kommandoerne for at slette alt.

Der er to hovedkommandoer til at slette de nøgler, der findes i Redis: FLUSHDB og FLUSHALL. Vi kan bruge Redis CLI til at udføre disse kommandoer.

Det FLUSHDB kommando sletter nøglerne i en database. Og FLUSHALL kommando sletter alle nøgler i alle databaser.

Vi kan udføre disse operationer i en baggrundstråd ved hjælp af ASYNC mulighed. Dette er nyttigt, hvis skylningen tager lang tid som kommandoen ASYNC forhindrer det i at blokere, indtil det er færdigt.

Vi skal bemærke, at ASYNC mulighed er tilgængelig fra Redis 4.0.0.

4. Arbejde med Java-klienten

Lad os nu se, hvordan du bruger Jedis Java-klienten til at slette nøgler.

4.1. Afhængigheder

Først skal vi tilføje Maven-afhængighed for Jedis:

 redis.clients jedis 3.3.0 

For at gøre test nemmere, lad os også bruge en integreret Redis-server:

 com.github.kstyrc embedded-redis 0.6 

4.2. Start af en indlejret Redis

Vi opretter en indlejret Redis-server til test med ved at køre den på en tilgængelig port:

RedisService redisServer = ny RedisServer (port);

Vores Jedis-klient oprettes derefter med lokal vært som værtsnavn og den samme port:

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

5. Skylning af en enkelt database

Lad os lægge nogle data i databasen og kontrollere, at de huskes:

String key = "key"; Strengværdi = "værdi"; jedis.set (nøgle, værdi); Streng modtaget = jedis.get (nøgle); assertEquals (værdi, modtaget);

Lad os nu skyl databasen ved hjælp af flushDB metode:

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

Som vi kan se, vender forsøg på at hente værdien efter skylning tilbage nul.

6. Rydning af alle databaser

Redis leverer flere databaser, som er nummererede. Vi kan tilføje data til forskellige databaser ved hjælp af Vælg kommando inden vi tilføjer vores værdier:

jedis.select (0); jedis.set ("nøgle1", "værdi1"); jedis.select (1); jedis.set ("key2", "value2");

Vi skal nu have en nøgle i hver af vores to databaser:

jedis.select (0); assertEquals ("værdi1", jedis.get ("nøgle1")); assertNull (jedis.get ("key2")); jedis.select (1); assertEquals ("værdi2", jedis.get ("nøgle2")); assertNull (jedis.get ("key1"));

Det flushDB metoden rydder kun den aktuelle database. For at rydde alle databaser bruger vi flushAll metode:

jedis.flushAll ();

Vi kan teste, at dette har fungeret:

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 hurtig datalager, der skalerer godt. Flush-operationer kan dog tage længere tid, når der er flere data.

Tidenes kompleksitet af FLUSHDB operation er PÅ), hvor N er antallet af nøgler i databasen. Hvis vi bruger FLUSHALL kommando, tidskompleksiteten er igen PÅ), men her, N er antallet af nøgler i alle databaser.

8. Konklusion

I denne artikel så vi, hvordan man kører Redis og redis-cli i Docker, og hvordan man bruger Jedis-klienten til Java med en indlejret Redis-server.

Vi så, hvordan man gemmer data i forskellige Redis-databaser, og hvordan man bruger skyllekommandoer til at rydde en eller flere af dem.

Som altid er kildekoden til denne artikel tilgængelig på GitHub.


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