Come posso eliminare tutto in Redis?


711

Voglio cancellare tutte le chiavi. Voglio che tutto sia cancellato e mi dia un database vuoto.

C'è un modo per farlo nel client Redis ?


3
Mi chiedo perché del *non funzioni. Restituisce 0.
Chloe,

1
riavviare il server Redis pulirà tutti i dati in esso, rit ?? @Timex
AATHITH RAJENDRAN,

Risposte:


1178

Con redis-cli:

  • FLUSHDB - Elimina tutte le chiavi dal database corrente della connessione.
  • FLUSHALL - Elimina tutte le chiavi da tutti i database.

Ad esempio, nella tua shell:

redis-cli flushall

1
Quando provo quanto sopra ottengo il seguente errore (error) LOADING Redis is loading the dataset in memory. Puoi specificare perché?
Ram Patra,

4
@Ramswaroop: hai riavviato Redis e attualmente sta caricando i dati dall'archivio permanente. Mentre questo processo (caricamento) è attivo, non è possibile manipolare il DB. O aspetta che finisca, oppure configura Redis senza persistenza e riavvialo (inizierà vuoto quindi non dovrai fare FLUSHALL una volta che è attivo).
Itamar Haber,

@ItamarHaber Grazie per l'aiuto, anche io ho capito lo stesso.
Ram Patra,

1
@Neo se non hai una libreria client redis in C #, puoi semplicemente eseguire quel comando, in questo modo: (new Process { StartInfo = new ProcessStartInfo { FileName = "redis-cli", Arguments = "flushall", CreateNoWindow = true }}).start();
Christian,

2
Utilizzare il -hflag per specificare un percorso del server redis
Adam F

194

Heads up che FLUSHALLpuò essere eccessivo. FLUSHDBè quello per svuotare solo un database. FLUSHALLcancellerà l'intero server. Come in ogni database sul server. Poiché la domanda riguardava lo svuotamento di un database, penso che questa sia una distinzione abbastanza importante da meritare una risposta separata.


4
+1 da parte mia, ho pensato che questa fosse la risposta migliore in realtà. Certo, la domanda del PO dice "cancella tutto" ma che è seguito da "dammi un database vuoto" - indipendentemente da ciò che realmente intendeva, penso che la distinzione che hai fatto sia utile, per non dire altro.
Doug,

28

Le risposte finora sono assolutamente corrette; cancellano tutte le chiavi.

Tuttavia, se si desidera eliminare anche tutti gli script Lua dall'istanza di Redis, è necessario seguirlo come segue:

FLUSH SCRIPT

L'OP pone due domande; questo completa la seconda domanda ( tutto cancellato).


4
No, ha posto una domanda e nei due anni successivi la portata di Redis è aumentata. La domanda del PO riguardava in particolare l'eliminazione delle chiavi. Stai rispondendo a una domanda diversa da questa.
The Real Bill,

15
@TheRealBill Devi pensare a ciò che è utile per i lettori SO attuali e futuri. Le risposte qui non ha affrontato del PO I want everything wiped out and give me a blank database.domanda più . Quindi, imho, la mia aggiunta è buona, che ha aiutato alcune persone. Sentiti libero di non essere d'accordo, questo è anche ciò di cui parla SO.
Tw Bert,

2
Il contesto è tutto e la prima frase lo stabilisce: "Voglio cancellare tutte le chiavi". Riscrivere la domanda per dare una risposta diversa non è ciò di cui mi hanno detto SO. Si tratta di porre la domanda posta, quindi il flag di moderazione che indica la risposta in esame sta rispondendo a una domanda diversa. Ma le opinioni differiscono.
The Real Bill

Se stai eseguendo il server da solo, il modo più rapido per cancellare tutto è quello di uccidere il server e riavviarlo (scoperto per caso)
acutesoftware


15

Se stai usando la gemma redis-rb, puoi semplicemente chiamare:

your_redis_client.flushdb

11

Questo metodo ha funzionato per me: elimina tutto il database attualmente collegato sul tuo cluster Jedis.

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

Un'altra opzione da parte mia:

Nei nostri database di produzione e pre-produzione ci sono migliaia di chiavi. Di tanto in tanto è necessario eliminare alcune chiavi (con una maschera), modificarle con alcuni criteri, ecc. Naturalmente, non c'è modo di farlo manualmente dalla CLI, specialmente se si ha lo sharding (512 dbs logici in ogni fisico).

A questo scopo scrivo lo strumento client Java che fa tutto questo lavoro. In caso di cancellazione delle chiavi l'utilità può essere molto semplice, solo una classe lì:

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

}

Scrivere questo tipo di strumenti trovo molto facile e non spendo più di 5-10 minuti.


5

FLUSHALL Elimina tutte le chiavi di tutti i database esistenti. Per la versione Redis> 4.0, FLUSHALL ASYNC è supportato e viene eseguito in un thread in background senza bloccare il server https://redis.io/commands/flushall

FLUSHDB - Elimina tutte le chiavi nel database selezionato. https://redis.io/commands/flushdb

La complessità temporale per eseguire le operazioni sarà O (N) dove N è il numero di chiavi nel database.

La risposta dal redis sarà una semplice stringa "OK"


4

È possibile utilizzare FLUSHALL che eliminerà tutte le chiavi da ogni database. Dove come FLUSHDB eliminerà tutte le chiavi dal nostro database corrente.


4
  1. Arresta l'istanza di Redis.
  2. Elimina il file RDB.
  3. Avviare l'istanza Redis.

Nella mia esperienza, se hai perseveranza, dovresti davvero seguire questa procedura + anche eliminare qualsiasi file .aof + problema redis-cli flushall, per rimuovere davvero tutto.
ywarnier

4

Utilizzare FLUSHALL ASYNCse si utilizza altro (Redis 4.0.0 o versione successiva) FLUSHALL.

https://redis.io/commands/flushall

Nota : tutto prima dell'esecuzione FLUSHALL ASYNCsarà sfrattato. Le modifiche apportate durante l'esecuzione FLUSHALL ASYNCrimarranno inalterate.


3

Apri redis-cli e digita:

FLUSHALL

1
Sebbene il tuo post possa rispondere alla domanda, manca di documentazione. Modifica la tua risposta e forniscile.
hellow

2

penso che a volte fermi il redis-server ed elimini rdb , aof files。 assicurati che non ci siano dati che possono essere ricaricati. quindi avvia il redis-server, ora è nuovo e vuoto.


2

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

Rimuoverà tutti i dati dal client connesso (con host e porta)


2

Dopo aver avviato il server Redis utilizzando: service redis-server start --port 8000oredis-server .

Uso redis-cli -p 8000 per connettersi al server come client in un altro terminale.

Puoi usare entrambi

  1. FLUSHDB - Elimina tutte le chiavi del DB attualmente selezionato. Questo comando non fallisce mai. La complessità temporale di questa operazione è O (N), essendo N il numero di chiavi nel database.
  2. FLUSHALL - Elimina tutte le chiavi di tutti i database esistenti, non solo quello attualmente selezionato. Questo comando non fallisce mai. La complessità temporale di questa operazione è O (N), essendo N il numero di chiavi in ​​tutti i database esistenti.

Controllare la documentazione per l' opzione ASYNC per entrambi.

Se stai usando Redis attraverso la sua interfaccia Python, usa queste due funzioni per la stessa funzionalità:

def flushall(self):
    "Delete all keys in all databases on the current host"
    return self.execute_command('FLUSHALL')

e

def flushdb(self):
    "Delete all keys in the current database"
    return self.execute_command('FLUSHDB')

1

Le tue domande sembrano riguardare la cancellazione di intere chiavi in ​​un database. In questo caso dovresti provare:

  1. Connetti a Redis. È possibile utilizzare il comando redis-cli(se in esecuzione sulla porta 6379), altrimenti sarà necessario specificare anche il numero di porta.
  2. Seleziona il tuo database (comando select {Index})
  3. Esegui il comando flushdb

Se vuoi scaricare le chiavi in ​​tutti i database, allora dovresti provare flushall.



1

Puoi usare FLUSHDB

per esempio

Elenco dei database:

127.0.0.1:6379> info keyspace
# Keyspace

Tasti elenco

127.0.0.1:6379> keys *
(empty list or set)

Aggiungi un valore a una chiave

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

Crea un'altra chiave con due valori

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

Elenca tutti i valori in key2

127.0.0.1:6379> lrange key2 0 -1
1) "2"
2) "1"

Fai FLUSHDB

127.0.0.1:6379> flushdb
OK

Elenca chiavi e database

127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> info keyspace
# Keyspace

Il comando keys * è un comando costoso. non eseguire questo comando su un server redis di produzione
emert117

1

puoi usare il seguente approccio in python

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

È meglio se puoi avere RDM (Redis Desktop Manager). Puoi connetterti al tuo server redis creando una nuova connessione in RDM.

Una volta connesso puoi controllare i dati in tempo reale, inoltre puoi giocare con qualsiasi comando redis.

Aprire un cli in RDM.

1) Fai clic destro sulla connessione vedrai un'opzione console, basta fare clic su di essa una nuova finestra console si aprirà nella parte inferiore di RDM.

Tornando alla tua domanda FLUSHALL è il comando, puoi semplicemente digitare FLUSHALL nel redis cli.

Inoltre, se vuoi conoscere qualsiasi comando redis e il suo corretto utilizzo, vai al link qui sotto. https://redis.io/commands .


0

Esistono approcci diversi. Se vuoi farlo da remoto, invia flushall a quell'istanza, attraverso lo strumento da riga di comando redis-cli o qualunque altro strumento, ad esempio telnet, un linguaggio SDK del linguaggio di programmazione. O semplicemente accedi a quel server, termina il processo, elimina il suo file dump.rdb e appendonly.aof (esegui il backup prima dell'eliminazione).


0

Se si utilizza Java quindi dalla documentazione, è possibile utilizzare uno di essi in base al caso d'uso.

/**
 * 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();

Codice:

RedisAdvancedClusterCommands syncCommands = // get sync() or async() commands 
syncCommands.flushdb();

Per saperne di più: https://github.com/lettuce-io/lettuce-core/wiki/Redis-Cluster

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.