我想删除所有密钥。我要把一切都删掉,给我一个空白的数据库。

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


当前回答

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

它列出了redis中的所有密钥,然后使用xargs传递给redis-cli DEL,每个命令最多使用100个密钥,但每次运行16个命令,当由于安全原因没有FLUSHDB或FLUSHOLL时,非常快速且有用,例如在Docker或Kubernetes中使用Bitnami的redis时。而且,它不需要任何额外的编程语言,只需要一行。

其他回答

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

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

我检查了intelligense中可用的内容,我看不到用现有API实现这一点的常用方法。我想这是故意的,是故意的。幸运的是,API确实公开了Execute方法。

我通过执行以下操作进行了测试:

打开了一个命令窗口。我正在使用docker,所以我是通过docker完成的。键入redis cli,启动cli键入KEYS*,它会显示我的所有密钥,以便我可以在执行以下代码之前和之后验证它们是否存在://不要滥用,小心使用var cache=连接多路复用器.Connect(新配置选项{端点={“localhost:6379”}});var db=_cache.GetDatabase();db.Execute(“flushdb”);再次键入KEYS*并查看其为空。

希望这对任何寻找它的人都有帮助。

打开redis cli并键入:

FLUSHALL

警惕FLUSHOLL可能过度使用。FLUSHDB仅用于刷新数据库。FLUSHOLL将清除整个服务器。就像服务器上的每个数据库一样。由于问题是关于刷新数据库,我认为这是一个足够重要的区别,值得单独回答。

您可以在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或FLUSHOLL时,非常快速且有用,例如在Docker或Kubernetes中使用Bitnami的redis时。而且,它不需要任何额外的编程语言,只需要一行。