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


712

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

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


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, вы должны выполнить следующие действия:

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

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


4
Нет, он задал один вопрос, и за два года с тех пор возможности Redis увеличились. Вопрос ОП касался конкретно удаления ключей. Вы отвечаете на другой вопрос, чем этот.
Настоящий законопроект

15
@TheRealBill Вы должны подумать о том, что полезно для нынешних и будущих читателей SO. Ответы здесь не рассматривается OP еще I want everything wiped out and give me a blank database.вопрос больше . Имхо, моё дополнение хорошее, которое помогло нескольким людям. Не стесняйтесь не соглашаться, конечно, это также то, о чем ТАК.
Tw Bert

2
Контекст - это все, и первое предложение устанавливает это: «Я хочу удалить все ключи». Переписать вопрос, чтобы дать другой ответ, - это не то, о чем мне говорят. Речь идет о том, чтобы задать заданный вопрос - следовательно, флаг модерации, указывающий на рассматриваемый ответ, отвечает на другой вопрос. Но мнения расходятся.
Настоящий Билл

Если вы запускаете сервер самостоятельно, самый быстрый способ стереть все - это убить сервер и перезапустить его (обнаружил это случайно)
acutesoftware


15

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

your_redis_client.flushdb

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

}

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 минут.


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 удалит все ключи из нашей текущей базы данных.


4
  1. Остановите экземпляр Redis.
  2. Удалить файл RDB.
  3. Запустите экземпляр Redis.

По моему опыту, если у вас есть постоянство, вы действительно должны следовать этой процедуре + также удалить любой файл .aof + выполнить команду redis-cli flushall, чтобы действительно удалить все.
ywarnier

4

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

https://redis.io/commands/flushall

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


3

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

FLUSHALL

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

2

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


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

Команда 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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.