Como faço para excluir tudo no Redis?


711

Eu quero excluir todas as chaves. Quero que tudo seja apagado e me dê um banco de dados em branco.

Existe uma maneira de fazer isso no cliente Redis ?


3
Eu me pergunto por del *que não funciona. Retorna 0.
Chloe

1
reinicie o servidor redis irá limpar todos os dados nele, rit ?? @Timex
AATHITH RAJENDRAN

Respostas:


1178

Com redis-cli:

  • FLUSHDB - Exclui todas as chaves do banco de dados atual da conexão.
  • FLUSHALL - Exclui todas as chaves de todos os bancos de dados.

Por exemplo, no seu shell:

redis-cli flushall

1
Quando tento o acima, recebo o seguinte erro (error) LOADING Redis is loading the dataset in memory. Você pode especificar o porquê?
Ram Patra

4
@Ramswaroop - você reiniciou o Redis e atualmente está carregando dados do armazenamento persistente. Enquanto esse processo (carregando) estiver ativo, você não pode manipular o banco de dados. Aguarde o término ou configure o Redis sem persistência e reinicie-o (ele começará vazio, para que você não precise executar o FLUSHALL assim que estiver pronto).
Itamar Haber

@ ItamarHaber Obrigado pela ajuda, eu também descobri o mesmo.
Ram Patra

1
@Neo se você não tem uma biblioteca cliente Redis em C #, você pode simplesmente executar esse comando, assim: (new Process { StartInfo = new ProcessStartInfo { FileName = "redis-cli", Arguments = "flushall", CreateNoWindow = true }}).start();
Christian

2
Use o -hsinalizador para especificar um local de servidor redis
Adam F

194

Atenção que FLUSHALLpode ser um exagero. FLUSHDBé o único a liberar apenas um banco de dados. FLUSHALLirá destruir todo o servidor. Como em todos os bancos de dados no servidor. Como a pergunta era sobre liberar um banco de dados, acho que essa é uma distinção importante o suficiente para merecer uma resposta separada.


4
+1 de mim, eu pensei que esta era a melhor resposta, na verdade. É verdade que a pergunta do OP diz "limpe tudo", mas é seguida por "me dê um banco de dados em branco" - independentemente do que ele realmente quis dizer, acho que a distinção que você fez é útil, para dizer o mínimo.
doug

28

As respostas até agora estão absolutamente corretas; eles excluem todas as chaves.

No entanto, se você também deseja excluir todos os scripts Lua da instância Redis, siga-o:

SCRIPT FLUSH

O OP faz duas perguntas; isso completa a segunda pergunta ( tudo apagado).


4
Não, ele fez uma pergunta e nos dois anos desde então o escopo no Redis aumentou. A pergunta do OP foi especificamente sobre a exclusão de chaves. Você está respondendo a uma pergunta diferente desta.
O projeto de lei real

15
@TheRealBill Você precisa pensar no que é útil para os atuais e futuros leitores de SO. As respostas aqui não abordavam mais aI want everything wiped out and give me a blank database. pergunta do OP . Então, imho, minha adição é boa, o que ajudou algumas pessoas. Sinta-se à vontade para discordar, é claro, também é disso que se trata.
Bert

2
O contexto é tudo, e a primeira frase estabelece: "Quero excluir todas as chaves". Reescrever a pergunta para dar uma resposta diferente não é o que me dizem que SO é. Trata-se de fazer a pergunta dada - portanto, o sinalizador de moderação que indica a resposta em análise está respondendo a uma pergunta diferente. Mas as opiniões diferem.
The Real Bill

Se você estiver executando o servidor mesmo, a maneira mais rápida para limpar tudo é matar o servidor e reiniciá-lo (descobriu isso acidentalmente)
acutesoftware


15

Se você estiver usando a gema redis-rb, basta ligar para:

your_redis_client.flushdb

11

Esse método funcionou para mim - exclua tudo do banco de dados conectado atual no seu 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

Mais uma opção do meu lado:

Nos nossos bancos de dados de produção e pré-produção, existem milhares de chaves. Ocasionalmente, precisamos excluir algumas chaves (por alguma máscara), modificar por alguns critérios etc. É claro que não há como fazê-lo manualmente a partir da CLI, principalmente com sharding (512 dbs lógicos em cada físico).

Para esse propósito, escrevo a ferramenta cliente java que faz todo esse trabalho. No caso de exclusão de chaves, o utilitário pode ser muito simples, apenas uma classe:

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

}

Ao escrever esse tipo de ferramenta, acho muito fácil e não gasto mais que 5 a 10 minutos.


5

FLUSHALL Exclui todos os bancos de dados de Keys of All existentes. Para a versão Redis> 4.0, é suportado o FLUSHALL ASYNC, que é executado em um encadeamento em segundo plano sem bloquear o servidor https://redis.io/commands/flushall

FLUSHDB - Exclui todas as chaves no banco de dados selecionado. https://redis.io/commands/flushdb

A complexidade do tempo para executar as operações será O (N), onde N é o número de chaves no banco de dados.

A resposta dos redis será uma sequência simples "OK"


4

Você pode usar o FLUSHALL, que excluirá todas as chaves de todos os seus bancos de dados. Onde FLUSHDB excluirá todas as chaves do nosso banco de dados atual.


4
  1. Pare a instância do Redis.
  2. Exclua o arquivo RDB.
  3. Inicie a instância do Redis.

Na minha experiência, se você tiver persistência, realmente deve seguir este procedimento + também excluir qualquer arquivo .aof + issue redis-cli flushall, para realmente remover tudo.
ywarnier

4

Use FLUSHALL ASYNCse estiver usando (Redis 4.0.0 ou superior) mais FLUSHALL.

https://redis.io/commands/flushall

Nota : Tudo antes da execução FLUSHALL ASYNCserá despejado. As alterações feitas durante a execução FLUSHALL ASYNCpermanecerão inalteradas.


3

Abra redis-cli e digite:

FLUSHALL

1
Embora sua postagem possa responder à pergunta, falta alguma documentação. Edite sua resposta e forneça-as.
hellow

2

acho que às vezes para o redis-server e exclui rdb (aof files), verifique se não há dados que possam ser recarregados. depois inicie o redis-server, agora está novo e vazio.


2

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

Ele removerá todos os dados do cliente conectado (com host e porta)


2

Depois de iniciar o servidor Redis usando: service redis-server start --port 8000ou redis-server.

Use redis-cli -p 8000para se conectar ao servidor como um cliente em um terminal diferente.

Você pode usar

  1. FLUSHDB - Exclua todas as chaves do banco de dados selecionado no momento. Este comando nunca falha. A complexidade de tempo para esta operação é O (N), N sendo o número de chaves no banco de dados.
  2. FLUSHALL - Exclua todas as chaves de todos os bancos de dados existentes, não apenas o atualmente selecionado. Este comando nunca falha. A complexidade de tempo para esta operação é O (N), N sendo o número de chaves em todos os bancos de dados existentes.

Verifique a documentação para a opção ASYNC para ambos.

Se você estiver usando o Redis através de sua interface python, use estas duas funções para a mesma funcionalidade:

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

Suas perguntas parecem ser sobre a exclusão de chaves inteiras em um banco de dados. Nesse caso, você deve tentar:

  1. Conecte-se ao redis. Você pode usar o comando redis-cli(se estiver executando na porta 6379); caso contrário, também precisará especificar o número da porta.
  2. Selecione seu banco de dados (comando select {Index})
  3. Execute o comando flushdb

Se você deseja liberar chaves em todos os bancos de dados, tente flushall.



1

Você pode usar FLUSHDB

por exemplo

Listar bancos de dados:

127.0.0.1:6379> info keyspace
# Keyspace

Chaves de lista

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

Adicione um valor a uma chave

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

Crie outra chave com dois valores

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

Listar todos os valores na chave2

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

Faça FLUSHDB

127.0.0.1:6379> flushdb
OK

Listar chaves e bancos de dados

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

O comando keys * é um comando caro. não executar este comando em uma produção Redis servidor
emert117

1

você pode usar a seguinte abordagem em 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

É melhor se você pode ter RDM (Redis Desktop Manager). Você pode se conectar ao seu servidor redis criando uma nova conexão no RDM.

Uma vez conectado, você pode verificar os dados ao vivo, também pode brincar com qualquer comando redis.

Abrindo um CLI no RDM.

1) Clique com o botão direito do mouse na conexão em que você verá uma opção de console; basta clicar nela; uma nova janela do console será aberta na parte inferior do RDM.

Voltando à sua pergunta FLUSHALL é o comando, você pode simplesmente digitar FLUSHALL no redis cli.

Além disso, se você quiser saber sobre qualquer comando redis e seu uso adequado, acesse o link abaixo. https://redis.io/commands .


0

Existem abordagens diferentes. Se você quiser fazer isso de forma remota, emita o comando flushall para essa instância, por meio da ferramenta de linha de comando redis-cli ou de qualquer outra ferramenta, por exemplo, telnet, um SDK da linguagem de programação. Ou simplesmente faça login no servidor, interrompa o processo, exclua seu arquivo dump.rdb e appendonly.aof (faça backup deles antes da exclusão).


0

Se você estiver usando Java e, a partir da documentação, poderá usar qualquer um deles com base no seu caso de 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();

Código:

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

Leia mais: https://github.com/lettuce-io/lettuce-core/wiki/Redis-Cluster

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.