Elimina tutto in Redis

1. Panoramica

Durante la memorizzazione nella cache in Redis, può essere utile svuotare l'intera cache quando diventa non valida.

In questo breve tutorial impareremo come eliminare tutte le chiavi presenti in Redis, sia in database specifici che in tutti i database.

Per prima cosa, esamineremo la riga di comando. Quindi, vedremo come ottenere la stessa cosa utilizzando le API e il client Java.

2. Esecuzione di Redis

Avremo bisogno di un'installazione di Redis con cui lavorare. Ci sono istruzioni di installazione per Mac e Linux nella guida rapida di Redis. Probabilmente è più facile eseguire Redis nella finestra mobile.

Avviamo un server Redis di prova:

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

E possiamo eseguire redis-cli per verificare che questo server funzioni :

docker exec -it redis redis-cli

Questo ci porta nella shell cli, dove il comando ping verificherà se il server è attivo:

127.0.0.1:6379> ping PONG

Usciamo dal redis-cli con CTRL + C.

3. Comandi Redis

Cominciamo con i comandi di Redis per eliminare tutto.

Esistono due comandi principali per eliminare le chiavi presenti in Redis: FLUSHDB e FLUSHALL . Possiamo usare la CLI di Redis per eseguire questi comandi.

Il comando FLUSHDB elimina le chiavi in ​​un database. E il comando FLUSHALL elimina tutte le chiavi in ​​tutti i database.

Possiamo eseguire queste operazioni in un thread in background utilizzando l' opzione ASYNC . Questo è utile se il lavaggio richiede molto tempo, poiché l'esecuzione del comando ASYNC ne impedisce il blocco fino al completamento.

Dobbiamo notare che l' opzione ASYNC è disponibile da Redis 4.0.0.

4. Lavorare con il client Java

Vediamo ora come utilizzare il client Java Jedis per eliminare le chiavi.

4.1. Dipendenze

Per prima cosa, dobbiamo aggiungere la dipendenza Maven per Jedis:

 redis.clients jedis 3.3.0 

Per semplificare i test, utilizziamo anche un server Redis incorporato:

 com.github.kstyrc embedded-redis 0.6 

4.2. Avvio di un Redis incorporato

Creeremo un server Redis incorporato con cui eseguire il test, eseguendolo su una porta disponibile:

RedisService redisServer = new RedisServer(port);

Il nostro client Jedis viene quindi creato con localhost come nome host e la stessa porta:

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

5. Svuotamento di un singolo database

Mettiamo alcuni dati nel database e controlliamo che siano ricordati:

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

Ora svuotiamo il database usando il metodo flushDB :

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

Come possiamo vedere, il tentativo di recuperare il valore dopo lo svuotamento restituisce null .

6. Cancellazione di tutti i database

Redis fornisce più database, numerati. Possiamo aggiungere dati a diversi database utilizzando il comando select prima di aggiungere i nostri valori:

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

Ora dovremmo avere una chiave in ciascuno dei nostri due database:

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

Il metodo flushDB cancellerà solo il database corrente . Per cancellare tutti i database, utilizziamo il metodo flushAll :

jedis.flushAll();

Possiamo provare che ha funzionato:

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

7. Complessità temporale

Redis è un archivio dati veloce che si adatta bene. Tuttavia, le operazioni di svuotamento possono richiedere più tempo quando sono presenti più dati.

La complessità temporale dell'operazione FLUSHDB è O (N) , dove N è il numero di chiavi nel database. Se usiamo il comando FLUSHALL , la complessità temporale è di nuovo O (N) , ma qui N è il numero di chiavi in ​​tutti i database.

8. Conclusione

In questo articolo, abbiamo visto come eseguire Redis e redis-cli in Docker e come utilizzare il client Jedis per Java con un server Redis incorporato.

Abbiamo visto come conservare i dati in diversi database Redis e come utilizzare i comandi di flush per cancellarne uno o più.

Come sempre, il codice sorgente di questo articolo è disponibile su GitHub.