如何删除Redis中的所有内容?

我想删除所有密钥。我想把所有东西都清除掉,给我一个空白数据库。

有没有办法在Redis客户端中做到这一点?

526587 次浏览

使用redis-cli:

  • FLUSHDB-从连接的当前数据库中删除所有键。
  • FLUSHALL-从所有数据库中删除所有键。

例如,在shell中:

redis-cli flushall

注意,FLUSHALL可能有点矫枉过正。FLUSHDB只刷新数据库。FLUSHALL将清除整个服务器。就像服务器上的每个数据库一样。由于问题是关于刷新数据库的,我认为这是一个足够重要的区别,值得单独回答。

如果您使用的是redis-rb gem,那么您可以简单地调用:

your_redis_client.flushdb

到目前为止的答案是绝对正确的;他们删除了所有键。

但是,如果您还想从Redis实例中删除所有lua脚本,您应该遵循以下操作:

脚本刷新

OP提出两个问题;这完成了第二个问题(一切擦除)。

FLUSHALL从所有数据库中删除所有键

FLUSHDB从当前数据库中删除所有键

SCRIPT FLUSH从脚本缓存中删除所有脚本。

您可以使用FLUSHALL,它将删除每个数据库中的所有密钥。FLUSHDB将从我们当前的数据库中删除所有密钥。

我这边还有一个选择:

在我们的生产和预生产数据库中有数千个键。有时我们需要删除一些键(通过一些掩码),修改一些标准等。当然,没有办法从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分钟。

这种方法对我有效-删除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());}}
}

FLUSHALL删除所有现有数据库的所有键。对于Redis版本>4.0,支持FLUSHALL ASYNC,它在后台线程wjthout阻塞服务器中运行https://redis.io/commands/flushall

FLUSHDB-删除所选数据库中的所有键。https://redis.io/commands/flushdb

执行操作的时间复杂度为O(N),其中N是数据库中的键数。

来自redis的响应将是一个简单的字符串“OK”

如果使用(Redis 4.0.0或更高版本),则使用FLUSHALL ASYNC,否则使用FLUSHALL

https://redis.io/commands/flushall

说明:执行FLUSHALL ASYNC之前的所有内容都将被驱逐。执行FLUSHALL ASYNC期间所做的更改将不受影响。

我想有时会停止redis-server并删除rdb、aof文件。确保没有数据可以重新加载。然后启动redis-server,现在它是新的并且是空的。

  1. 停止Redis实例。
  2. 删除RDB文件。
  3. 启动Redis实例。

redis-cli -h <host> -p <port> flushall

它将从连接的客户端(带有主机和端口)中删除所有数据

使用:service redis-server start --port 8000redis-server启动Redis服务器后。

使用redis-cli -p 8000作为不同终端中的客户端连接到服务器。

你也可以用

  1. FLUSHDB-删除当前选定数据库的所有键。此命令永远不会失败。此操作的时间复杂度为O(N),N是数据库中的键数。
  2. FLUSHALL-删除所有现有数据库的所有键,而不仅仅是当前选择的一个。此命令永远不会失败。此操作的时间复杂度为O(N),N是所有现有数据库中的键数。

检查两者的留档ASYNC选项。

如果您通过其python接口使用Redis,请将这两个函数用于相同的功能:

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

您的问题似乎是关于删除数据库中的整个键。在这种情况下,您应该尝试:

  1. 连接到redis。您可以使用命令redis-cli(如果在端口6379上运行),否则您还必须指定端口号。
  2. 选择您的数据库(命令select {Index}
  3. 执行命令flushdb

如果您想刷新所有数据库中的键,那么您应该尝试flushall

最好有RDM(Redis桌面管理器)。您可以通过在RDM中创建新连接来连接到您的redis服务器。

连接后,您可以检查实时数据,也可以使用任何redis命令。

在RDM中打开一个cli。

1)右键单击连接,您将看到一个控制台选项,只需单击它,RDM底部将打开一个新的控制台窗口。

回到你的问题FLUSHALL是命令,你可以简单地在redis cli中键入FLUSHALL。

此外,如果您想了解任何redis命令及其正确用法,请转到下面的链接。https://redis.io/commands.

有不同的方法。如果您想从远程执行此操作,请通过命令行工具redis-cli或任何工具(即telnet,一种编程语言SDK)向该实例发出flushall。或者只需登录该服务器,终止进程,删除其dump.rdb文件并appendonly.aof(删除前备份它们)。

您可以使用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) 1127.0.0.1:6379> keys *1) "key1"127.0.0.1:6379> info keyspace# Keyspacedb0:keys=1,expires=0,avg_ttl=0

用两个值创建另一个键

127.0.0.1:6379> lpush key2 1(integer) 1127.0.0.1:6379> lpush key2 2(integer) 2127.0.0.1:6379> keys *1) "key1"2) "key2"127.0.0.1:6379> info keyspace# Keyspacedb0:keys=2,expires=0,avg_ttl=0

列出key2中的所有值

127.0.0.1:6379> lrange key2 0 -11) "2"2) "1"

FLUSHDB

127.0.0.1:6379> flushdbOK

列出键和数据库

127.0.0.1:6379> keys *(empty list or set)127.0.0.1:6379> info keyspace# Keyspace

如果您使用的是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() commandssyncCommands.flushdb();

阅读更多:https://github.com/lettuce-io/lettuce-core/wiki/Redis-Cluster

您可以在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

这对我有用:redis-cli KEYS \* | xargs --max-procs=16 -L 100 redis-cli DEL

它在redis中列出所有键,然后使用xargs传递给redis-cli DEL,每个命令最多使用100个键,但一次运行16个命令,当由于安全原因没有FLUSHDB或FLUSHALL时非常快速和有用,例如在Docker或库伯内特斯中使用Bitnami的Redis时。此外,它不需要任何额外的编程语言,只需一行。

您可以在终端中使用flushall

redis-cli> flushall

如果你想在Windows中清除redis:在

中找到redis-cli

C:\Program Files\Redis并运行FLUSHALL命令。

对于任何想知道如何在C#中做到这一点的人来说,这与这个问题的为Python提供的答案相同。

我正在使用StackExchange. Redis v2.2.88进行点网(核心)5项目。我只需要清除集成测试的密钥,我在生产中没有目的这样做。

我检查了智能感知中可用的内容,我没有看到使用现有API执行此操作的常用方法。我想这是故意的和设计的。幸运的是,API确实公开了Execute方法。

我通过执行以下操作来测试它:

  1. 打开了一个命令窗口。我使用docker,所以我通过docker完成。

  2. 输入redis-cli启动CLI

  3. 输入KEYS *,它会显示我所有的密钥,这样我就可以在执行以下代码之前和之后验证它们是否存在:

    //不要滥用这个,谨慎使用var缓存=连接乘法。新建配置选项{端点={"localhost:6379"}});

    var db=_cache. GetDatabase();

    db。执行(“刷新数据库”);

  4. 再次输入KEYS *并查看它为空。

希望这有助于任何人寻找它。