Redis命令获取所有可用密钥?

Lal*_*ith 470 redis redis-cli redis-commands

是否有Redis命令用于获取数据库中的所有密钥?我看到一些python-redis库获取它们.但是想知道redis-client是否有可能.

yoj*_*o87 673

试着看看KEYS命令.KEYS *将列出存储在redis中的所有密钥.

编辑:请注意KEYS文档页面顶部的警告:

时间复杂度: O(N),其中N是数据库中的密钥数,假设数据库中的密钥名称和给定模式的长度有限.

更新(V2.8或更高版本): SCAN是一种更好的替代方案KEYS,因为它不会阻塞服务器,也不会占用大量资源.更喜欢使用它.

  • CLI用法示例:`redis-cli keys"*"` (78认同)
  • 也不要忘记先“选择 DatabaseNubmer” (5认同)
  • 更正:所有redis命令均为单线程,将阻止服务器。唯一的不同是,`KEYS`有可能在查询大型数据集时阻塞服务器更长的时间 (2认同)

Ita*_*ber 147

针对Redis 2.8及更高版本进行了更新

正如此问题的先前答案的评论中所述,KEYS由于您的Redis服务器在提供服务时无法执行其他操作,因此这是一个潜在危险的命令.另一个风险KEYS是它可以消耗(取决于你的密钥空间的大小)大量的RAM来准备响应缓冲区,从而可能耗尽服务器的内存.

Redis的2.8版引入了SCAN系列命令,这些命令更有礼貌,可以用于相同的目的.

CLI还提供了一种很好的方法来处理它:

$ redis-cli --scan --pattern '*'
Run Code Online (Sandbox Code Playgroud)


Evh*_*vhz 50

可能会发生使用redis-cli,连接到远程redis-server,然后命令:

KEYS *
Run Code Online (Sandbox Code Playgroud)

没有显示任何内容,或更好,它显示:
(empty list or set)

如果您完全确定您使用的Redis服务器是您拥有数据的服务器,则可能您的redis-cli未连接到Redis正确的数据库实例.

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

在我的情况下,KEYS命令没有检索结果,因为我的数据库是1.为了选择所需的数据库,请使用SELECT.
db由整数标识.

SELECT 1
KEYS *
Run Code Online (Sandbox Code Playgroud)

我发布此信息是因为以前的答案都没有解决我的问题.


den*_*nny 27

- >从redis-cli获取所有密钥

-redis 127.0.0.1:6379> keys *
Run Code Online (Sandbox Code Playgroud)

- >获取模式列表

-redis 127.0.0.1:6379> keys d??
Run Code Online (Sandbox Code Playgroud)

这将生成以"d"开头的三个字符的键.

-redis 127.0.0.1:6379> keys *t*
Run Code Online (Sandbox Code Playgroud)

这将获得键中匹配't'字符的键

- >从命令行计数键

-redis-cli keys * |wc -l
Run Code Online (Sandbox Code Playgroud)

- >或者你可以使用 dbsize

-redis-cli dbsize
Run Code Online (Sandbox Code Playgroud)


wam*_*ami 17

看看以下Redis Cheat Sheet.要使用redis-cli获取redis密钥的子集,请使用该命令

KEYS "prefix:*"
Run Code Online (Sandbox Code Playgroud)


Net*_*ons 9

获取Redis中的所有键

使用 --scan 选项获取所有密钥:

$ redis-cli --scan --pattern '*'
Run Code Online (Sandbox Code Playgroud)

使用 KEYS 命令列出所有键:

$ redis-cli KEYS '*'
Run Code Online (Sandbox Code Playgroud)


Alb*_*hew 6

是的,您可以使用此功能获取所有密钥

var redis = require('redis');
redisClient = redis.createClient(redis.port, redis.host);    
  redisClient.keys('*example*', function (err, keys) {
})
Run Code Online (Sandbox Code Playgroud)

  • 不完全是OP所要求的(redis-cli),但感谢你指出这一点. (4认同)

gob*_*obi 6

redis-cli -h <host> -p <port> keys * 
Run Code Online (Sandbox Code Playgroud)

其中 * 是列出所有键的模式

  • 我必须引用星号,如下所示: `redis-cli -h &lt;host&gt; -p &lt;port&gt; keys '*'` (3认同)

Pat*_*ins 5

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
Run Code Online (Sandbox Code Playgroud)


ana*_*ule 5

按键模式

自 1.0.0 起可用。

时间复杂度:O(N),其中 N 是数据库中键的数量,假设数据库中的键名称和给定模式的长度有限。

返回与模式匹配的所有键。

警告:不建议使用此命令,因为当针对大型数据库而不是可以使用SCANSETS的 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"
Run Code Online (Sandbox Code Playgroud)