Ich möchte alle Schlüssel löschen. Ich möchte, dass alles ausgelöscht wird und ich eine leere Datenbank bekomme.
Gibt es eine Möglichkeit, dies im Redis- Client zu tun ?
Ich möchte alle Schlüssel löschen. Ich möchte, dass alles ausgelöscht wird und ich eine leere Datenbank bekomme.
Gibt es eine Möglichkeit, dies im Redis- Client zu tun ?
Antworten:
Mit redis-cli:
Zum Beispiel in Ihrer Shell:
redis-cli flushall
(error) LOADING Redis is loading the dataset in memory
. Können Sie angeben, warum?
(new Process { StartInfo = new ProcessStartInfo { FileName = "redis-cli", Arguments = "flushall", CreateNoWindow = true }}).start();
-h
Flag, um einen Redis-Server-Standort anzugeben
Heads up, das FLUSHALL
könnte übertrieben sein. FLUSHDB
ist derjenige, der nur eine Datenbank leert. FLUSHALL
löscht den gesamten Server aus. Wie in jeder Datenbank auf dem Server. Da es um das Löschen einer Datenbank ging, denke ich, dass dies eine Unterscheidung ist, die wichtig genug ist, um eine separate Antwort zu verdienen.
Die bisherigen Antworten sind absolut richtig; Sie löschen alle Schlüssel.
Wenn Sie jedoch auch alle Lua- Skripte aus der Redis-Instanz löschen möchten , sollten Sie Folgendes befolgen:
Das OP stellt zwei Fragen; Damit ist die zweite Frage abgeschlossen ( alles gelöscht).
I want everything wiped out and give me a blank database.
Frage des OP nicht mehr beantwortet . Also, imho, mein Zusatz ist gut, was einigen Leuten geholfen hat. Fühlen Sie sich frei, natürlich nicht zuzustimmen, darum geht es auch bei SO.
FLUSHALL Entfernen Sie alle Schlüssel aus allen Datenbanken
FLUSHDB Entfernen Sie alle Schlüssel aus der aktuellen Datenbank
SCRIPT FLUSH Entfernen Sie alle Skripte aus dem Skriptcache .
Diese Methode hat bei mir funktioniert - löschen Sie alle aktuell verbundenen Datenbanken in Ihrem Jedis-Cluster.
public static void resetRedis() {
jedisCluster = RedisManager.getJedis(); // your JedisCluster instance
for (JedisPool pool : jedisCluster.getClusterNodes().values()) {
try (Jedis jedis = pool.getResource()) {
jedis.flushAll();
}
catch (Exception ex){
System.out.println(ex.getMessage());
}
}
}
Noch eine Option von meiner Seite:
In unseren Produktions- und Vorproduktionsdatenbanken befinden sich Tausende von Schlüsseln. Von Zeit zu Zeit müssen wir einige Schlüssel löschen (durch eine Maske), nach bestimmten Kriterien ändern usw. Natürlich gibt es keine Möglichkeit, dies manuell über die CLI zu tun, insbesondere mit Sharding (512 logische DBS in jedem physischen).
Zu diesem Zweck schreibe ich ein Java-Client-Tool, das all diese Arbeit erledigt. Im Falle des Löschens von Schlüsseln kann das Dienstprogramm sehr einfach sein, nur eine Klasse dort:
public class DataCleaner {
public static void main(String args[]) {
String keyPattern = args[0];
String host = args[1];
int port = Integer.valueOf(args[2]);
int dbIndex = Integer.valueOf(args[3]);
Jedis jedis = new Jedis(host, port);
int deletedKeysNumber = 0;
if(dbIndex >= 0){
deletedKeysNumber += deleteDataFromDB(jedis, keyPattern, dbIndex);
} else {
int dbSize = Integer.valueOf(jedis.configGet("databases").get(1));
for(int i = 0; i < dbSize; i++){
deletedKeysNumber += deleteDataFromDB(jedis, keyPattern, i);
}
}
if(deletedKeysNumber == 0) {
System.out.println("There is no keys with key pattern: " + keyPattern + " was found in database with host: " + host);
}
}
private static int deleteDataFromDB(Jedis jedis, String keyPattern, int dbIndex) {
jedis.select(dbIndex);
Set<String> keys = jedis.keys(keyPattern);
for(String key : keys){
jedis.del(key);
System.out.println("The key: " + key + " has been deleted from database index: " + dbIndex);
}
return keys.size();
}
}
Das Schreiben solcher Werkzeuge finde ich sehr einfach und verbringe nicht mehr als 5-10 Minuten.
FLUSHALL Löscht alle Schlüssel aller vorhandenen Datenbanken. Für Redis Version> 4.0 wird FLUSHALL ASYNC unterstützt, das in einem Hintergrundthread ausgeführt wird, ohne den Server https://redis.io/commands/flushall zu blockieren
FLUSHDB - Löscht alle Schlüssel in der ausgewählten Datenbank. https://redis.io/commands/flushdb
Die zeitliche Komplexität zum Ausführen der Operationen beträgt O (N), wobei N die Anzahl der Schlüssel in der Datenbank ist.
Die Antwort von den Redis ist eine einfache Zeichenfolge "OK".
Sie können FLUSHALL verwenden, um alle Schlüssel aus jeder Datenbank zu löschen. Wobei als FLUSHDB alle Schlüssel aus unserer aktuellen Datenbank gelöscht werden.
Verwenden Sie FLUSHALL ASYNC
diese Option, wenn Sie (Redis 4.0.0 oder höher) verwenden FLUSHALL
.
https://redis.io/commands/flushall
Hinweis : Alles vor der Ausführung FLUSHALL ASYNC
wird entfernt. Die während der Ausführung vorgenommenen Änderungen FLUSHALL ASYNC
bleiben davon unberührt.
Öffnen Sie redis-cli und geben Sie Folgendes ein:
FLUSHALL
Ich denke, manchmal stoppen Sie den Redis-Server und löschen Sie rdb , aof Dateien。 stellen Sie sicher, dass keine Daten neu geladen werden können. Starten Sie dann den Redis-Server, jetzt ist er neu und leer.
Nachdem Sie den Redis-Server gestartet haben mit: service redis-server start --port 8000
oder redis-server
.
Verwenden Sie redis-cli -p 8000
diese Option , um als Client in einem anderen Terminal eine Verbindung zum Server herzustellen.
Sie können entweder verwenden
Überprüfen Sie die Dokumentation für die ASYNC- Option für beide.
Wenn Sie Redis über die Python-Oberfläche verwenden, verwenden Sie diese beiden Funktionen für dieselbe Funktionalität:
def flushall(self):
"Delete all keys in all databases on the current host"
return self.execute_command('FLUSHALL')
und
def flushdb(self):
"Delete all keys in the current database"
return self.execute_command('FLUSHDB')
Ihre Fragen scheinen sich mit dem Löschen ganzer Schlüssel in einer Datenbank zu befassen. In diesem Fall sollten Sie versuchen:
redis-cli
(wenn er auf Port 6379 ausgeführt wird), andernfalls müssen Sie auch die Portnummer angeben.select {Index}
)flushdb
Wenn Sie Schlüssel in allen Datenbanken löschen möchten, sollten Sie es versuchen flushall
.
Ein Klick in FastoRedis / FastoNoSQL
Sie können verwenden FLUSHDB
z.B
Datenbanken auflisten:
127.0.0.1:6379> info keyspace
# Keyspace
Listenschlüssel
127.0.0.1:6379> keys *
(empty list or set)
Fügen Sie einem Schlüssel einen Wert hinzu
127.0.0.1:6379> lpush key1 1
(integer) 1
127.0.0.1:6379> keys *
1) "key1"
127.0.0.1:6379> info keyspace
# Keyspace
db0:keys=1,expires=0,avg_ttl=0
Erstellen Sie einen anderen Schlüssel mit zwei Werten
127.0.0.1:6379> lpush key2 1
(integer) 1
127.0.0.1:6379> lpush key2 2
(integer) 2
127.0.0.1:6379> keys *
1) "key1"
2) "key2"
127.0.0.1:6379> info keyspace
# Keyspace
db0:keys=2,expires=0,avg_ttl=0
Listen Sie alle Werte in key2 auf
127.0.0.1:6379> lrange key2 0 -1
1) "2"
2) "1"
Do FLUSHDB
127.0.0.1:6379> flushdb
OK
Listenschlüssel und Datenbanken
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> info keyspace
# Keyspace
Sie können den folgenden Ansatz in Python verwenden
def redis_clear_cache(self):
try:
redis_keys = self.redis_client.keys('*')
except Exception as e:
# print('redis_client.keys() raised exception => ' + str(e))
return 1
try:
if len(redis_keys) != 0:
self.redis_client.delete(*redis_keys)
except Exception as e:
# print('redis_client.delete() raised exception => ' + str(e))
return 1
# print("cleared cache")
return 0
Es ist besser, wenn Sie RDM (Redis Desktop Manager) haben können. Sie können eine Verbindung zu Ihrem Redis-Server herstellen, indem Sie eine neue Verbindung in RDM erstellen.
Sobald die Verbindung hergestellt ist, können Sie die Live-Daten überprüfen und mit jedem Redis-Befehl herumspielen.
Cli in RDM öffnen.
1) Klicken Sie mit der rechten Maustaste auf die Verbindung, um eine Konsolenoption anzuzeigen. Klicken Sie einfach darauf. Ein neues Konsolenfenster wird unten in RDM geöffnet.
Um auf Ihre Frage zurückzukommen: FLUSHALL ist der Befehl. Sie können einfach FLUSHALL in die Redis-Cli eingeben.
Wenn Sie mehr über einen Redis-Befehl und dessen ordnungsgemäße Verwendung erfahren möchten, klicken Sie auf den folgenden Link. https://redis.io/commands .
Es gibt verschiedene Ansätze. Wenn Sie dies von remote aus tun möchten, geben Sie diese Instanz über das Befehlszeilentool redis-cli oder ein anderes Tool, z. B. Telnet, ein Programmiersprachen-SDK, für diese Instanz aus. Oder melden Sie sich einfach auf diesem Server an, beenden Sie den Prozess, löschen Sie die Datei dump.rdb und appendonly.aof (sichern Sie sie vor dem Löschen).
Wenn Sie Java verwenden , können Sie aus der Dokumentation eine beliebige davon basierend auf Ihrem Anwendungsfall verwenden.
/**
* Remove all keys from all databases.
*
* @return String simple-string-reply
*/
String flushall();
/**
* Remove all keys asynchronously from all databases.
*
* @return String simple-string-reply
*/
String flushallAsync();
/**
* Remove all keys from the current database.
*
* @return String simple-string-reply
*/
String flushdb();
/**
* Remove all keys asynchronously from the current database.
*
* @return String simple-string-reply
*/
String flushdbAsync();
Code:
RedisAdvancedClusterCommands syncCommands = // get sync() or async() commands
syncCommands.flushdb();
Lesen Sie mehr: https://github.com/lettuce-io/lettuce-core/wiki/Redis-Cluster
del *
nicht funktioniert. Es gibt 0 zurück.