Wenn ich das oben genannte versuche, erhalte ich den folgenden Fehler (error) LOADING Redis is loading the dataset in memory. Können Sie angeben, warum?
Ram Patra
4
@Ramswaroop - Sie haben Redis neu gestartet und es werden derzeit Daten aus dem persistenten Speicher geladen. Während dieser Prozess (Laden) aktiv ist, können Sie die Datenbank nicht bearbeiten. Warten Sie entweder, bis es fertig ist, oder konfigurieren Sie Redis ohne Persistenz und starten Sie es neu (es wird leer gestartet, sodass Sie FLUSHALL nicht mehr ausführen müssen, sobald es aktiv ist).
Itamar Haber
@ItamarHaber Danke für die Hilfe, auch ich habe das herausgefunden.
Ram Patra
1
@Neo, wenn Sie keine Redis-Client-Bibliothek in C # haben, können Sie diesen Befehl einfach wie folgt ausführen: (new Process { StartInfo = new ProcessStartInfo { FileName = "redis-cli", Arguments = "flushall", CreateNoWindow = true }}).start();
Christian
2
Verwenden Sie das -hFlag, um einen Redis-Server-Standort anzugeben
Adam F
194
Heads up, das FLUSHALLkönnte übertrieben sein. FLUSHDBist derjenige, der nur eine Datenbank leert. FLUSHALLlö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.
+1 von mir, ich dachte das wäre eigentlich die bessere Antwort. Zugegeben, in der Frage des OP heißt es: "Alles auslöschen", gefolgt von "Gib mir eine leere Datenbank" - unabhängig davon, was er eigentlich meinte, denke ich, dass die Unterscheidung, die Sie gemacht haben, gelinde gesagt nützlich ist.
Doug
28
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:
Nein, er stellte eine Frage und in den zwei Jahren seitdem nahm der Umfang in Redis zu. Die Frage des OP betraf speziell das Löschen von Schlüsseln. Sie beantworten eine andere Frage als diese.
The Real Bill
15
@TheRealBill Sie müssen darüber nachdenken, was für aktuelle und zukünftige SO-Leser nützlich ist. Die Antworten hier haben die 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.
Tw Bert
2
Der Kontext ist alles, und der erste Satz legt es fest: "Ich möchte alle Schlüssel löschen". Das Umschreiben der Frage, um eine andere Antwort zu geben, ist nicht das, worum es mir bei SO geht. Es geht darum, die gestellte Frage zu stellen - daher beantwortet das Moderationsflag, das die zu überprüfende Antwort angibt, eine andere Frage. Die Meinungen sind jedoch unterschiedlich.
The Real Bill
Wenn Sie den Server selbst
ausführen
18
FLUSHALL
Entfernen Sie alle Schlüssel aus allen Datenbanken
FLUSHDB
Entfernen Sie alle Schlüssel aus der aktuellen Datenbank
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
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.
Hinweis : Alles vor der Ausführung FLUSHALL ASYNCwird entfernt. Die während der Ausführung vorgenommenen Änderungen FLUSHALL ASYNCbleiben davon unberührt.
Obwohl Ihr Beitrag die Frage möglicherweise beantwortet, fehlen einige Unterlagen. Bitte bearbeiten Sie Ihre Antwort und geben Sie diese an.
Gelb
2
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 8000oder redis-server.
Verwenden Sie redis-cli -p 8000diese Option , um als Client in einem anderen Terminal eine Verbindung zum Server herzustellen.
Sie können entweder verwenden
FLUSHDB - Löscht alle Schlüssel der aktuell ausgewählten Datenbank . Dieser Befehl schlägt niemals fehl. Die zeitliche Komplexität für diese Operation beträgt O (N), wobei N die Anzahl der Schlüssel in der Datenbank ist.
FLUSHALL - Löschen Sie alle Schlüssel aller vorhandenen Datenbanken, nicht nur die aktuell ausgewählte. Dieser Befehl schlägt niemals fehl. Die zeitliche Komplexität für diese Operation beträgt O (N), wobei N die Anzahl der Schlüssel in allen vorhandenen Datenbanken ist.
Ü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:
Stellen Sie eine Verbindung zu redis her. Sie können den Befehl verwenden redis-cli(wenn er auf Port 6379 ausgeführt wird), andernfalls müssen Sie auch die Portnummer angeben.
Wählen Sie Ihre Datenbank (Befehl select {Index})
Führen Sie den Befehl aus flushdb
Wenn Sie Schlüssel in allen Datenbanken löschen möchten, sollten Sie es versuchen flushall.
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();
del *
nicht funktioniert. Es gibt 0 zurück.Antworten:
Mit redis-cli:
Zum Beispiel in Ihrer Shell:
quelle
(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 anzugebenHeads 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.quelle
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:
SCRIPT FLUSH
Das OP stellt zwei Fragen; Damit ist die zweite Frage abgeschlossen ( alles gelöscht).
quelle
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 .
quelle
Wenn Sie den Edelstein redis-rb verwenden, können Sie einfach anrufen:
quelle
Diese Methode hat bei mir funktioniert - löschen Sie alle aktuell verbundenen Datenbanken in Ihrem Jedis-Cluster.
quelle
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:
Das Schreiben solcher Werkzeuge finde ich sehr einfach und verbringe nicht mehr als 5-10 Minuten.
quelle
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".
quelle
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.
quelle
Verwenden Sie
FLUSHALL ASYNC
diese Option, wenn Sie (Redis 4.0.0 oder höher) verwendenFLUSHALL
.https://redis.io/commands/flushall
Hinweis : Alles vor der Ausführung
FLUSHALL ASYNC
wird entfernt. Die während der Ausführung vorgenommenen ÄnderungenFLUSHALL ASYNC
bleiben davon unberührt.quelle
quelle
Öffnen Sie redis-cli und geben Sie Folgendes ein:
quelle
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.
quelle
redis-cli -h <host> -p <port> flushall
Es werden alle Daten vom verbundenen Client entfernt (mit Host und Port).
quelle
Nachdem Sie den Redis-Server gestartet haben mit:
service redis-server start --port 8000
oderredis-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:
und
quelle
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
.quelle
Ein Klick in FastoRedis / FastoNoSQL
quelle
Sie können verwenden
FLUSHDB
z.B
Datenbanken auflisten:
Listenschlüssel
Fügen Sie einem Schlüssel einen Wert hinzu
Erstellen Sie einen anderen Schlüssel mit zwei Werten
Listen Sie alle Werte in key2 auf
Do FLUSHDB
Listenschlüssel und Datenbanken
quelle
Sie können den folgenden Ansatz in Python verwenden
quelle
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 .
quelle
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).
quelle
Wenn Sie Java verwenden , können Sie aus der Dokumentation eine beliebige davon basierend auf Ihrem Anwendungsfall verwenden.
Code:
Lesen Sie mehr: https://github.com/lettuce-io/lettuce-core/wiki/Redis-Cluster
quelle