Я хочу видалити всі ключі. Я хочу, щоб все викреслили і дали мені пусту базу даних.
Чи є спосіб це зробити у клієнта Redis ?
Я хочу видалити всі ключі. Я хочу, щоб все викреслили і дали мені пусту базу даних.
Чи є спосіб це зробити у клієнта Redis ?
Відповіді:
З Redis-cli:
Наприклад, у вашій оболонці:
redis-cli flushall
(error) LOADING Redis is loading the dataset in memory
. Чи можете ви вказати, чому?
(new Process { StartInfo = new ProcessStartInfo { FileName = "redis-cli", Arguments = "flushall", CreateNoWindow = true }}).start();
-h
прапор, щоб вказати місце розташування сервера redis
Голова вгору, що FLUSHALL
може бути зайвим. FLUSHDB
є лише для того, щоб промити базу даних. FLUSHALL
знищить весь сервер. Як і в кожній базі даних на сервері. Оскільки питання стосувалося промивання бази даних, я думаю, що це досить важлива відмінність, щоб заслужити окрему відповідь.
Поки відповіді абсолютно правильні; вони видаляють усі ключі.
Однак якщо ви також хочете видалити всі скрипти Lua з екземпляра Redis, слід дотримуватися цього:
ОП задає два питання; цим завершується друге питання ( все витерте).
I want everything wiped out and give me a blank database.
питання більше . Тож, імхо, моє доповнення - це гарне, що допомогло небагатьом людям. Не соромтеся не погоджуватися з курсом, ось про що і йдеться.
ПІДТРИМКА Видаліть усі ключі з усіх баз даних
FLUSHDB Видаліть усі ключі з поточної бази даних
СКРИПТОВИЙ ПЛІШ Вилучіть усі скрипти з кеша скриптів.
Цей метод працював для мене - видаліть усе поточне підключене База даних на вашому кластері 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());
}
}
}
Ще один варіант з мого боку:
У наших виробничих та передвиробничих базах даних є тисячі ключів. Час від часу нам потрібно видалити деякі клавіші (за якоюсь маскою), змінити за якимись критеріями тощо. Звичайно, немає ніякого способу зробити це вручну з 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 хв.
FLUSHALL Видаляє всі ключі всіх існуючих баз даних. Для версії Redis> 4.0 підтримується FLUSHALL ASYNC, який працює у фоновому потоці без блокування сервера https://redis.io/commands/flushall
FLUSHDB - Видаляє всі клавіші у вибраній Базі даних. https://redis.io/commands/flushdb
Складність часу для виконання операцій складе O (N), де N - кількість ключів у базі даних.
Відповідь від redis буде простим рядком "OK"
Ви можете використовувати FLUSHALL, який видалить усі ключі з кожної бази даних. Де FLUSHDB видалить усі ключі з нашої поточної бази даних.
Використовуйте, FLUSHALL ASYNC
якщо використовуєте (Redis 4.0.0 або вище) FLUSHALL
.
https://redis.io/commands/flushall
Примітка : все перед виконанням FLUSHALL ASYNC
буде виселено. Зміни, внесені під час виконання FLUSHALL ASYNC
, залишатимуться без змін.
Відкрийте redis-cli та введіть:
FLUSHALL
Я думаю, що іноді зупиняю redis-сервер і видаляй rdb , aof файли。 переконайся, що немає даних, які можна перезавантажувати. потім запустіть сервер redis, тепер він новий і порожній.
Після запуску Redis-сервера за допомогою: service redis-server start --port 8000
або redis-server
.
Використовуйте redis-cli -p 8000
для підключення до сервера як клієнта в іншому терміналі.
Ви можете використовувати будь-який
Перевірте документацію щодо параметра 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')
Здається, ваші запитання стосуються видалення цілих ключів у базі даних. У цьому випадку слід спробувати:
redis-cli
(якщо вона працює на порту 6379), в іншому випадку доведеться також вказати номер порту.select {Index}
)flushdb
Якщо ви хочете залишити клавіші у всіх базах даних, тоді слід спробувати flushall
.
Один клік у FastoRedis / FastoNoSQL
Можна використовувати 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
Ви можете використовувати наступний підхід у 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
Краще, якщо у вас є RDM (Redis Desktop Manager). Ви можете підключитися до свого сервера redis, створивши нове з'єднання в RDM.
Після підключення ви можете перевірити живі дані, а також можете пограти з будь-якою командою redis.
Відкриття кліпу в RDM.
1) Клацніть правою кнопкою миші на підключенні, ви побачите параметр консолі, просто натисніть на неї, в нижній частині RDM відкриється нове вікно консолі.
Повернувшись до свого запитання, це команда FLUSHALL, ви можете просто ввести FLUSHALL в ролик Redis.
Крім того, якщо ви хочете дізнатися про будь-яку команду redis та її правильне використання, перейдіть за посиланням нижче. https://redis.io/commands .
Існують різні підходи. Якщо ви хочете зробити це з віддаленого пристрою, надішліть flushall до цього примірника через інструмент командного рядка redis-cli або будь-які інші інструменти, тобто telnet, SDK мови програмування. Або просто увійдіть у цей сервер, вбийте процес, видаліть його файл dump.rdb та appendonly.aof (резервні копії їх перед видаленням).
Якщо ви використовуєте 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
del *
це не працює. Повертається 0.