Wie lösche ich alles in Redis?


710

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 ?


3
Ich frage mich, warum del *nicht funktioniert. Es gibt 0 zurück.
Chloe

1
Neustart der Redis-Server wird alle Daten in ihm bereinigen, nicht wahr? @ Timx
AATHITH RAJENDRAN

Antworten:


1177

Mit redis-cli:

Zum Beispiel in Ihrer Shell:

redis-cli flushall

1
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.


4
+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:

SCRIPT FLUSH

Das OP stellt zwei Fragen; Damit ist die zweite Frage abgeschlossen ( alles gelöscht).


4
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


15

Wenn Sie den Edelstein redis-rb verwenden, können Sie einfach anrufen:

your_redis_client.flushdb

11

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());
        }
    }

}

7

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.


5

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".


4

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.


4

Verwenden Sie FLUSHALL ASYNCdiese Option, wenn Sie (Redis 4.0.0 oder höher) verwenden FLUSHALL.

https://redis.io/commands/flushall

Hinweis : Alles vor der Ausführung FLUSHALL ASYNCwird entfernt. Die während der Ausführung vorgenommenen Änderungen FLUSHALL ASYNCbleiben davon unberührt.


3
  1. Stoppen Sie die Redis-Instanz.
  2. RDB-Datei löschen.
  3. Starten Sie die Redis-Instanz.

3

Öffnen Sie redis-cli und geben Sie Folgendes ein:

FLUSHALL

1
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.


2

redis-cli -h <host> -p <port> flushall

Es werden alle Daten vom verbundenen Client entfernt (mit Host und Port).


2

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

  1. 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.
  2. 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')

1

Ihre Fragen scheinen sich mit dem Löschen ganzer Schlüssel in einer Datenbank zu befassen. In diesem Fall sollten Sie versuchen:

  1. 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.
  2. Wählen Sie Ihre Datenbank (Befehl select {Index})
  3. Führen Sie den Befehl aus flushdb

Wenn Sie Schlüssel in allen Datenbanken löschen möchten, sollten Sie es versuchen flushall.



1

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

Der Befehl keys * ist ein teurer Befehl. Führen Sie diesen Befehl nicht auf einem Produktions-Redis-Server aus
emert117

1

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

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 .


0

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).


0

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.