是否有一个Redis命令获取数据库中的所有键?我见过一些python-redis库获取它们。但我想知道从redis-client是否可以。


当前回答

我们应该在redis 2.8及以后的版本中使用——scan——pattern。

您可以尝试在redis-cli之上使用这个包装器。 https://github.com/VijayantSoni/redis-helper

其他回答

键模式

自1.0.0起可用。 时间复杂度:O(N), N为数字 数据库中的键,假设键名在 数据库和给定模式的长度是有限的。

返回所有匹配模式的键。

警告:不建议使用此命令,因为它可能会破坏性能,当它针对大型数据库执行时,可以使用SCAN或SETS代替KEYS。

KEYS命令使用示例:

redis> MSET firstname Jack lastname Stuntman age 35
"OK"
redis> KEYS *name*
1) "lastname"
2) "firstname"
redis> KEYS a??
1) "age"
redis> KEYS *
1) "lastname"
2) "age"
3) "firstname"

你可以简单地连接到你的redis服务器使用redis-cli,选择你的数据库和类型键*,请记住它会给你所有的键,目前选定的redis数据库。

在Redis中获得所有键

使用——scan选项获取所有键:

$ redis-cli --scan --pattern '*'

使用keys命令列出所有密钥:

$ redis-cli KEYS '*'

使用redis-cli,你可以连接到你的远程redis-server,然后命令:

KEYS *

没有显示任何东西,或者更好,它显示: (空列表或集合)

如果你绝对确定你使用的Redis服务器就是你拥有数据的服务器,那么可能你的Redis -cli没有连接到正确的Redis数据库实例。

正如Redis文档中提到的,新连接默认连接到db 0。

在我的情况下,KEYS命令没有检索结果,因为我的数据库是1。为了选择您想要的db,请使用select。 db用整数标识。

SELECT 1
KEYS *

我发布这个信息是因为之前的答案都没有解决我的问题。

SCAN不像keys那样要求客户端将所有键加载到内存中。SCAN提供了一个可以使用的迭代器。我的redis里有1B条记录,我永远都没有足够的内存来一次性归还所有的键。

下面是一个python代码片段,用于从匹配模式的存储中获取所有键并删除它们:

import redis
r = redis.StrictRedis(host='localhost', port=6379, db=0)
for key in r.scan_iter("key_pattern*"):
    print key