tutorial - redis win




Come posso eliminare tutto in Redis? (12)

Voglio cancellare tutte le chiavi. Voglio tutto spazzato via e dammi un database vuoto.

C'è un modo per farlo nel client Redis ?


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

È meglio se puoi avere RDM (Redis Desktop Manager). È possibile connettersi al 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 della console, basta cliccare su di essa si aprirà una nuova finestra della console 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 sottostante. https://redis.io/commands .


Ci sono diversi approcci. Se si desidera eseguire questa operazione da remoto, immettere flushall in quell'istanza, tramite lo strumento della riga di comando redis-cli o qualsiasi altro strumento, ad esempio telnet, un SDK del linguaggio di programmazione. O semplicemente accedi al server, uccidi il processo, elimina il suo file dump.rdb e appendonly.aof (esegui il backup prima di eliminarlo).


Con redis-cli:

  • FLUSHDB: rimuove i dati dal database CORRENTE della connessione.
  • FLUSHALL - Rimuove i dati da TUTTI i database.

Redis documentazione:

Ad esempio, nella tua shell:

redis-cli flushall

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

FLUSHDB: cancella 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 dai redis sarà una semplice stringa "OK"


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

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

FLUSSO DI SCRIPT

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


Puoi usare FLUSHALL che cancellerà tutte le chiavi da ogni tuo database. Dove FLUSHDB cancellerà tutte le chiavi dal nostro attuale database.


Questo metodo ha funzionato per me: elimina tutto il database connesso corrente 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());
        }
    }

}

Un'altra opzione dalla mia parte:

Nei nostri database di produzione e pre-produzione ci sono migliaia di chiavi. Di volta in volta abbiamo bisogno di cancellare alcune chiavi (con qualche maschera), modificare secondo alcuni criteri, ecc. Naturalmente, non c'è modo di farlo manualmente dalla CLI, specialmente avendo sharding (512 dbs logici in ogni fisico).

Per questo scopo scrivo lo strumento client java che fa tutto questo lavoro. In caso di cancellazione di 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();
    }

}

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



flushall Rimuovi tutte le chiavi da tutti i database

flushdb Rimuovi tutte le chiavi dal database corrente

SCRIPT FLUSH Rimuovi tutti gli script dalla cache degli script.


FLUSHALL che FLUSHALL potrebbe essere eccessivo. FLUSHDB è il solo a svuotare un database. FLUSHALL cancellerà l'intero server. Come in ogni database sul server. Poiché la domanda riguardava il lavaggio di un database, ritengo che questa sia una distinzione abbastanza importante da meritare una risposta separata.





redis