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


当前回答

键模式

自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-cli获取所有密钥

-redis 127.0.0.1:6379> keys *

——>获取图案列表

-redis 127.0.0.1:6379> keys d??

这将生成以'd'开头的三个字符的键。

-redis 127.0.0.1:6379> keys *t*

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

——>从命令行计数键

-redis-cli keys * |wc -l

或者你也可以使用dbsize

-redis-cli dbsize

是的,你可以通过使用这个得到所有的钥匙

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

试着看看KEYS命令。KEYS *将列出redis中存储的所有键。

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

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

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

针对Redis 2.8及以上版本更新

正如在之前回答这个问题的评论中所指出的,KEYS是一个潜在的危险命令,因为您的Redis服务器在服务时将不可用,无法执行其他操作。使用KEYS的另一个风险是,它可能会消耗(取决于密钥空间的大小)大量RAM来准备响应缓冲区,因此可能耗尽服务器的内存。

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

CLI还提供了一种很好的方式来使用它:

$ redis-cli --scan --pattern '*'
redis-cli -h <host> -p <port> keys * 

哪里*是列出所有键的模式