Löschen Sie alles in Redis

1. Übersicht

Beim Zwischenspeichern in Redis kann es hilfreich sein, den gesamten Cache zu löschen, wenn er ungültig wird.

In diesem kurzen Tutorial erfahren Sie, wie Sie alle in Redis vorhandenen Schlüssel sowohl in bestimmten Datenbanken als auch in allen Datenbanken löschen.

Zuerst schauen wir uns die Kommandozeile an. Dann werden wir sehen, wie Sie dasselbe mit den APIs und dem Java-Client erreichen.

2. Redis ausführen

Wir benötigen eine Installation von Redis, um damit arbeiten zu können. Im Redis-Schnellstart finden Sie Installationsanweisungen für Mac und Linux. Es ist wahrscheinlich einfacher, Redis im Docker auszuführen.

Starten wir einen Test-Redis-Server:

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

Und wir können redis-cli ausführen , um zu testen, ob dieser Server funktioniert:

docker exec -it redis redis-cli

Dies versetzt uns in die CLI-Shell, in der der Befehl ping prüft, ob der Server aktiv ist:

127.0.0.1:6379> ping PONG

Wir verlassen die Redis-Cli mit STRG + C.

3. Redis-Befehle

Beginnen wir mit den Redis-Befehlen, um alles zu löschen.

Es gibt zwei Hauptbefehle zum Löschen der in Redis vorhandenen Schlüssel: FLUSHDB und FLUSHALL . Wir können die Redis-CLI verwenden, um diese Befehle auszuführen.

Der Befehl FLUSHDB löscht die Schlüssel in einer Datenbank. Und der Befehl FLUSHALL löscht alle Schlüssel in allen Datenbanken.

Wir können diese Operationen in einem Hintergrundthread mit der Option ASYNC ausführen . Dies ist nützlich, wenn das Spülen lange dauert, da der Befehl ASYNC das Blockieren verhindert, bis es abgeschlossen ist.

Wir sollten beachten, dass die ASYNC- Option ab Redis 4.0.0 verfügbar ist.

4. Arbeiten mit dem Java Client

Lassen Sie uns nun sehen, wie Sie den Jedis Java-Client zum Löschen von Schlüsseln verwenden.

4.1. Abhängigkeiten

Zuerst müssen wir die Maven-Abhängigkeit für Jedis hinzufügen:

 redis.clients jedis 3.3.0 

Verwenden Sie zur Vereinfachung des Testens auch einen eingebetteten Redis-Server:

 com.github.kstyrc embedded-redis 0.6 

4.2. Starten eines eingebetteten Redis

Wir erstellen einen eingebetteten Redis-Server zum Testen, indem wir ihn auf einem verfügbaren Port ausführen:

RedisService redisServer = new RedisServer(port);

Unser Jedis-Client wird dann mit localhost als Hostnamen und demselben Port erstellt:

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

5. Leeren einer einzelnen Datenbank

Lassen Sie uns einige Daten in die Datenbank einfügen und überprüfen, ob sie gespeichert sind:

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

Lassen Sie uns nun die Datenbank mit der flushDB- Methode leeren :

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

Wie wir sehen können, gibt der Versuch, den Wert nach dem Leeren abzurufen, null zurück .

6. Alle Datenbanken löschen

Redis bietet mehrere Datenbanken, die nummeriert sind. Mit dem Befehl select können wir Daten zu verschiedenen Datenbanken hinzufügen, bevor wir unsere Werte hinzufügen:

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

Wir sollten jetzt einen Schlüssel in jeder unserer beiden Datenbanken haben:

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

Die flushDB- Methode löscht nur die aktuelle Datenbank . Um alle Datenbanken zu löschen, verwenden wir die flushAll- Methode:

jedis.flushAll();

Wir können testen, ob dies funktioniert hat:

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

7. Zeitkomplexität

Redis ist ein schneller Datenspeicher, der sich gut skalieren lässt. Spülvorgänge können jedoch länger dauern, wenn mehr Daten vorhanden sind.

Die zeitliche Komplexität der FLUSHDB- Operation beträgt O (N) , wobei N die Anzahl der Schlüssel in der Datenbank ist. Wenn wir den Befehl FLUSHALL verwenden , ist die Zeitkomplexität wieder O (N) , aber hier ist N die Anzahl der Schlüssel in allen Datenbanken.

8. Fazit

In diesem Artikel haben wir gesehen, wie Redis und Redis-Cli in Docker ausgeführt werden und wie der Jedis-Client für Java mit einem eingebetteten Redis-Server verwendet wird.

Wir haben gesehen, wie Daten in verschiedenen Redis-Datenbanken gespeichert werden und wie mit den Flush-Befehlen einer oder mehrere von ihnen gelöscht werden.

Wie immer ist der Quellcode für diesen Artikel auf GitHub verfügbar.