Як видалити все в Redis?


710

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

Чи є спосіб це зробити у клієнта Redis ?


3
Цікаво, чому del *це не працює. Повертається 0.
Хлоя,

1
перезапустити сервер redis очистить усі дані в ньому, rit ?? @Timex
AATHITH RAJENDRAN

Відповіді:


1177

З Redis-cli:

  • FLUSHDB - Видаляє всі ключі з поточної бази даних з'єднання.
  • FLUSHALL - Видаляє всі ключі з усіх баз даних.

Наприклад, у вашій оболонці:

redis-cli flushall

1
Коли я намагаюся сказати вище, я отримую таку помилку (error) LOADING Redis is loading the dataset in memory. Чи можете ви вказати, чому?
Рам Патра

4
@Ramswaroop - ви перезапустили Redis і він наразі завантажує дані з постійного сховища. Поки цей процес (завантаження) активний, ви не можете маніпулювати БД. Або зачекайте, коли він закінчиться, або налаштуйте Redis без наполегливості та перезапустіть його (він почне пустувати, тому вам не потрібно буде робити FLUSHALL, як тільки він вгору).
Ітамар Хабер

@ItamarHaber Дякую за допомогу, я теж зрозумів те саме.
Рам Патра

1
@Neo, якщо у вас немає бібліотеки клієнтів Redis в C #, ви можете просто запустити цю команду, наприклад: (new Process { StartInfo = new ProcessStartInfo { FileName = "redis-cli", Arguments = "flushall", CreateNoWindow = true }}).start();
Christian

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 gem, ви можете просто зателефонувати:

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 логічних dbs у кожному фізичному).

Для цього я пишу інструмент для клієнта 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 Видаляє всі ключі всіх існуючих баз даних. Для версії Redis> 4.0 підтримується FLUSHALL ASYNC, який працює у фоновому потоці без блокування сервера https://redis.io/commands/flushall

FLUSHDB - Видаляє всі клавіші у вибраній Базі даних. https://redis.io/commands/flushdb

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

Відповідь від redis буде простим рядком "OK"



4

Використовуйте, FLUSHALL ASYNCякщо використовуєте (Redis 4.0.0 або вище) FLUSHALL.

https://redis.io/commands/flushall

Примітка : все перед виконанням FLUSHALL ASYNCбуде виселено. Зміни, внесені під час виконання FLUSHALL ASYNC, залишатимуться без змін.


3
  1. Зупиніть екземпляр Redis.
  2. Видалити файл RDB.
  3. Запустіть екземпляр Redis.

3

Відкрийте redis-cli та введіть:

FLUSHALL

1
Хоча ваша публікація може відповісти на це питання, вона не має певної документації. Відредагуйте свою відповідь та надайте їх.
привіт

2

Я думаю, що іноді зупиняю redis-сервер і видаляй rdb , aof файли。 переконайся, що немає даних, які можна перезавантажувати. потім запустіть сервер redis, тепер він новий і порожній.


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

Команда ключів * - це дорога команда. не запускайте цю команду на виробничому сервері
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.

Крім того, якщо ви хочете дізнатися про будь-яку команду 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.