Я хочу удалить все ключи. Я хочу, чтобы все стерли с лица земли и дали мне пустую базу
Есть ли способ сделать это в клиенте Redis ?
Я хочу удалить все ключи. Я хочу, чтобы все стерли с лица земли и дали мне пустую базу
Есть ли способ сделать это в клиенте Redis ?
Ответы:
С редис-кли:
Например, в вашей оболочке:
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.
вопрос больше . Имхо, моё дополнение хорошее, которое помогло нескольким людям. Не стесняйтесь не соглашаться, конечно, это также то, о чем ТАК.
FLUSHALL Удалить все ключи из всех баз данных
FLUSHDB Удалить все ключи из текущей базы данных
FLUSH SCRIPT Удалите все скрипты из кэша скриптов.
Этот метод работал для меня - удалить все из текущей подключенной базы данных в вашем кластере 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 логических дБ в каждом физическом).
Для этого я пишу клиентский инструмент 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 Удаляет все существующие ключи Keys of All. Для версии Redis> 4.0 поддерживается FLUSHALL ASYNC, которая запускается в фоновом потоке без блокировки сервера https://redis.io/commands/flushall
FLUSHDB - удаляет все ключи в выбранной базе данных. https://redis.io/commands/flushdb
Временная сложность выполнения операций будет O (N), где N - количество ключей в базе данных.
Ответ от Redis будет простой строкой «ОК»
Вы можете использовать FLUSHALL, который удалит все ключи из каждой вашей базы данных. Где, как FLUSHDB удалит все ключи из нашей текущей базы данных.
Используйте, FLUSHALL ASYNC
если используете (Redis 4.0.0 или выше) иначе FLUSHALL
.
https://redis.io/commands/flushall
Примечание : все до выполнения FLUSHALL ASYNC
будет выселено. Изменения, сделанные во время выполнения FLUSHALL ASYNC
, останутся без изменений.
Откройте Redis-Cli и введите:
FLUSHALL
Я думаю, что иногда останавливайте Redis-сервер и удаляйте rdb-файлы, убедитесь, что нет данных, которые можно перезагрузить. затем запустите редис-сервер, теперь он новый и пустой.
После запуска 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 cli.
Более того, если вы хотите узнать о любой команде 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.