Как мне удалить все в Redis?

712

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

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

TIMEX
источник
3
Интересно, почему del *не работает. Возвращает 0.
Хлоя
1
перезапустите сервер redis, очистите все данные в нем, rit ?? @Timex
АЭФИТ РАДЖЕНДРАН

Ответы:

1179

С редис-кли:

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

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

redis-cli flushall
Хавьер
источник
1
Когда я пробую выше, я получаю следующую ошибку (error) LOADING Redis is loading the dataset in memory. Можете ли вы указать, почему?
Рам Патра
4
@Ramswaroop - вы перезапустили Redis, и в настоящее время он загружает данные из постоянного хранилища. Пока этот процесс (загрузка) активен, вы не можете манипулировать БД. Либо дождитесь его завершения, либо настройте Redis без сохранения состояния и перезапустите его (он будет пустым, поэтому вам не нужно будет выполнять команду FLUSHALL после ее запуска).
Итамар Хабер
@ItamarHaber Спасибо за помощь, я тоже понял.
Рам Патра
1
@ Нет, если у вас нет клиентской библиотеки Redis в C #, вы можете просто запустить эту команду, например, так: (new Process { StartInfo = new ProcessStartInfo { FileName = "redis-cli", Arguments = "flushall", CreateNoWindow = true }}).start();
Кристиан,
2
Используйте -hфлаг, чтобы указать расположение сервера Redis
Adam F
194

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

Настоящий Билл
источник
4
+1 от меня, я думал, что это был лучший ответ на самом деле. Конечно, Вопрос ОП гласит «стереть все», но затем следует «дать мне пустую базу данных» - независимо от того, что он на самом деле имел в виду, я думаю, что сделанное вами различие полезно, если не сказать больше.
Дуг
28

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

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

СЦЕНАРИЙ ФЛЕШ

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

Tw Bert
источник
4
Нет, он задал один вопрос, и за два года с тех пор возможности Redis увеличились. Вопрос ОП касался конкретно удаления ключей. Вы отвечаете на другой вопрос, чем этот.
Настоящий законопроект
15
@TheRealBill Вы должны подумать о том, что полезно для нынешних и будущих читателей SO. Ответы здесь не рассматривается OP еще I want everything wiped out and give me a blank database.вопрос больше . Имхо, моё дополнение хорошее, которое помогло нескольким людям. Не стесняйтесь не соглашаться, конечно, это также то, о чем ТАК.
Tw Bert
2
Контекст - это все, и первое предложение устанавливает это: «Я хочу удалить все ключи». Переписать вопрос, чтобы дать другой ответ, - это не то, о чем мне говорят. Речь идет о том, чтобы задать заданный вопрос - следовательно, флаг модерации, указывающий на рассматриваемый ответ, отвечает на другой вопрос. Но мнения расходятся.
Настоящий Билл
Если вы запускаете сервер самостоятельно, самый быстрый способ стереть все - это убить сервер и перезапустить его (обнаружил это случайно)
acutesoftware
18

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

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

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

Джайн рач
источник
15

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

your_redis_client.flushdb
Ger
источник
11

Этот метод работал для меня - удалить все из текущей подключенной базы данных в вашем кластере 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());
        }
    }

}
Kaidul
источник
7

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

В наших производственных и опытных базах данных тысячи ключей. Время от времени нам нужно удалять некоторые ключи (по некоторой маске), изменять по некоторым критериям и т. Д. Конечно, невозможно сделать это вручную из 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 минут.

Denys
источник
5

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

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

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

Ответ от Redis будет простой строкой «ОК»

атаван канапули
источник
4

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

justbegancoding
источник
4
  1. Остановите экземпляр Redis.
  2. Удалить файл RDB.
  3. Запустите экземпляр Redis.
Denys
источник
По моему опыту, если у вас есть постоянство, вы действительно должны следовать этой процедуре + также удалить любой файл .aof + выполнить команду redis-cli flushall, чтобы действительно удалить все.
ywarnier
4

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

https://redis.io/commands/flushall

Примечание : все до выполнения FLUSHALL ASYNCбудет выселено. Изменения, сделанные во время выполнения FLUSHALL ASYNC, останутся без изменений.

arnabmitra
источник
3

Откройте Redis-Cli и введите:

FLUSHALL
бехзад бабей
источник
1
Хотя ваше сообщение может ответить на этот вопрос, в нем отсутствует некоторая документация. Пожалуйста, отредактируйте свой ответ и предоставьте его.
Привет
2

Я думаю, что иногда останавливайте Redis-сервер и удаляйте rdb-файлы, убедитесь, что нет данных, которые можно перезагрузить. затем запустите редис-сервер, теперь он новый и пустой.

tcrabsheen
источник
2

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

Он удалит все данные с подключенного клиента (с хостом и портом)

гоби
источник
2

После запуска Redis-сервера используйте: service redis-server start --port 8000или redis-server.

Используйте redis-cli -p 8000для подключения к серверу в качестве клиента в другом терминале.

Вы можете использовать либо

  1. FLUSHDB - Удалить все ключи текущей выбранной БД. Эта команда никогда не подведет. Сложность по времени для этой операции составляет O (N), где N - это количество ключей в базе данных.
  2. FLUSHALL - Удалить все ключи всех существующих баз данных, а не только выбранную в данный момент. Эта команда никогда не подведет. Сложность по времени для этой операции составляет O (N), где N - это количество ключей во всех существующих базах данных.

Проверьте документацию для опции ASYNC для обоих.

Если вы используете Redis через его интерфейс python, используйте эти две функции для одинаковых функций:

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

а также

def flushdb(self):
    "Delete all keys in the current database"
    return self.execute_command('FLUSHDB')
Арчит Сингх
источник
1

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

  1. Подключитесь к Redis. Вы можете использовать команду redis-cli(если она работает на порту 6379), иначе вам также нужно будет указать номер порта.
  2. Выберите вашу базу данных (команду select {Index})
  3. Выполнить команду flushdb

Если вы хотите сбросить ключи во всех базах данных, попробуйте flushall.

Равирадж Сингх
источник
1

Ты можешь использовать FLUSHDB

например

Список баз данных:

127.0.0.1:6379> info keyspace
# Keyspace

Список ключей

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

Добавьте одно значение к ключу

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

Создать другой ключ с двумя значениями

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

Перечислите все значения в key2

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

Сделать FLUSHDB

127.0.0.1:6379> flushdb
OK

Список ключей и баз данных

127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> info keyspace
# Keyspace
user9869932
источник
Команда keys * - это дорогая команда. не запускайте эту команду на рабочем сервере
redis
1

Вы можете использовать следующий подход в 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
AbhiK
источник
0

Лучше, если у вас есть RDM (Redis Desktop Manager). Вы можете подключиться к вашему серверу Redis, создав новое соединение в RDM.

После подключения вы можете проверить текущие данные, а также вы можете поиграть с любой командой redis.

Открытие кли в RDM.

1) Щелкните правой кнопкой мыши по соединению, вы увидите консольную опцию, просто нажмите на нее, откроется новое окно консоли в нижней части RDM.

Возвращаясь к вашему вопросу, FLUSHALL - это команда, вы можете просто набрать FLUSHALL в redis cli.

Более того, если вы хотите узнать о любой команде redis и ее правильном использовании, перейдите по ссылке ниже. https://redis.io/commands .

Манвендра Джина
источник
0

Есть разные подходы. Если вы хотите сделать это удаленно, выполните команду flushall для этого экземпляра, используя инструмент командной строки redis-cli или любые другие инструменты, например telnet, SDK для языка программирования. Или просто войдите в систему на этом сервере, убейте процесс, удалите его файл dump.rdb и appendonly.aof (сделайте резервную копию перед удалением).

不辞 长 做 岭南 人
источник
0

Если вы используете Java, то из документации вы можете использовать любой из них в зависимости от вашего варианта использования.

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

Код:

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

Узнайте больше: https://github.com/lettuce-io/lettuce-core/wiki/Redis-Cluster

roottraveller
источник