Как мне удалить все в Redis? - PullRequest
664 голосов
/ 28 июля 2011

Я хочу удалить все ключи.Я хочу, чтобы все стерли с лица земли и дали мне пустую базу данных.

Есть ли способ сделать это в Redis клиенте?

Ответы [ 20 ]

1116 голосов
/ 28 июля 2011

С помощью redis-cli:

  • FLUSHDB - удаляет данные из базы данных CURRENT вашего подключения.
  • FLUSHALL - удаляет данные из всех баз данных.

Документация Redis:

Например, в вашей оболочке:

redis-cli flushall
185 голосов
/ 29 июля 2011

На голову, что FLUSHALL может быть излишним.FLUSHDB только для очистки базы данных.FLUSHALL уничтожит весь сервер.Как и в каждой базе данных на сервере.Поскольку вопрос касался очистки базы данных, я думаю, что это достаточно важное различие, чтобы заслужить отдельный ответ.

27 голосов
/ 27 января 2014

Ответы пока абсолютно верны;они удаляют все ключи.

Однако, если вы также хотите удалить все сценарии Lua из экземпляра Redis, вы должны следовать за ним:

FLUSH СКРИПТА

ФП задает два вопроса;это завершает второй вопрос ( все уничтожен).

16 голосов
/ 16 октября 2015

FLUSHALL Удалить все ключи из всех баз данных

FLUSHDB Удалить все ключи из текущей базы данных

SCRIPT FLUSH Удалите все скрипты из кэша скриптов.

15 голосов
/ 25 февраля 2013

Если вы используете гем redis-rb, вы можете просто позвонить:

your_redis_client.flushdb
11 голосов
/ 09 ноября 2016

Этот метод сработал для меня - удалите все из текущей подключенной базы данных в вашем кластере 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 голосов
/ 01 сентября 2016

Еще один вариант с моей стороны:

В наших производственных и опытных базах данных есть тысячи ключей.Время от времени нам нужно удалять некоторые ключи (по некоторой маске), изменять по некоторым критериям и т. Д. Конечно, невозможно сделать это вручную из CLI, особенно с использованием шардинга (512 логических дБ в каждой физической).

Для этого я пишу клиентский инструмент Java, который выполняет всю эту работу.В случае удаления ключей утилита может быть очень простой, там только один класс:

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

}

Написание такого рода инструментов я нахожу очень легким и трачу не более 5-10 минут.

5 голосов
/ 22 марта 2017

FLUSHALL Удаляет все ключи всех существующих баз данных. Для версии Redis> 4.0 поддерживается FLUSHALL ASYNC, которая работает в фоновом потоке без блокировки сервера https://redis.io/commands/flushall

FLUSHDB - удаляет все ключи в выбранной базе данных. https://redis.io/commands/flushdb

Временная сложность выполнения операций будет O (N), где N - количество ключей в базе данных.

Ответом от redis будет простая строка «ОК»

4 голосов
/ 22 мая 2017

Используйте FLUSHALL ASYNC при использовании (Redis 4.0.0 или выше), иначе FLUSHALL

https://redis.io/commands/flushall

4 голосов
/ 20 июня 2016

Вы можете использовать FLUSHALL, который удалит все ключи из каждой вашей базы данных.Где, как FLUSHDB, удалит все ключи из нашей текущей базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...