Я хочу удалить все ключи. Я хочу, чтобы все было уничтожено и дало мне пустую базу данных.
Есть ли способ сделать это в Redis клиент?
Я хочу удалить все ключи. Я хочу, чтобы все было уничтожено и дало мне пустую базу данных.
Есть ли способ сделать это в Redis клиент?
С помощью redis-cli:
Например, в вашей оболочке:
redis-cli flushall
Загорается, что FLUSHALL
может быть излишним. FLUSHDB
- это тот, который только очищает базу данных. FLUSHALL
уничтожит весь сервер. Как в каждой базе данных на сервере. Поскольку вопрос касался очистки базы данных, я думаю, что это достаточно важное различие, чтобы заслужить отдельный ответ.
Ответы до сих пор абсолютно верны; они удаляют все ключи.
Однако, если вы также хотите удалить все сценарии Lua из экземпляра Redis, вы должны следовать ему:
ОП задает два вопроса; это завершает второй вопрос ( все, вытертый).
FLUSHALL Удалите все ключи из всех баз данных.
FLUSHDB Удалить все ключи из текущей базы данных
SCRIPT FLUSH Удалите все сценарии из кэша script.
Если вы используете жемчуг redis-rb, тогда вы можете просто позвонить:
your_redis_client.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 Удаляет все ключи всех существующих баз данных. FOr 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 или выше) else FLUSHALL
Я думаю, иногда останавливают redis-сервер и удаляют rdb, aof файлы. убедитесь, что данные не могут быть перезагружены. затем запустите redis-server, теперь он новый и пустой.
redis-cli -h <host> -p <port> flushall
Он удалит все данные с подключенного клиента (с хостом и портом)
После запуска 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 и введите:
FLUSHALL
Вы можете использовать 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-cli
(если она запущена на порту 6379), иначе вам также нужно будет указать номер порта.select {Index}
)flushdb
Если вы хотите скрывать ключи во всех базах данных, вам следует попробовать flushall
.
Лучше, если у вас есть 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 (создайте резервные копии перед удалением).
Один клик в FastoRedis/FastoNoSQL
FLUSHALL: удалить все ключи из всех баз данных
FLUSHDB: из конкретной базы данных.
Если вы используете 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