打印Redis中的键数

时间:2012-03-27 11:06:16

标签: redis

有没有办法在Redis中打印键数?

我知道

keys *

但这似乎有点重。 - 鉴于Redis是一个关键的价值商店,也许这是唯一的方法。但是,我仍然希望看到类似

的内容
count keys *

10 个答案:

答案 0 :(得分:168)

您可以发出INFO命令,该命令返回有关服务器的信息和统计信息。有关示例输出,请参阅here

正如mVChr的评论所述,您可以直接在redis-cli上使用info keyspace

答案 1 :(得分:138)

DBSIZE返回键的数量,并且更容易解析。

缺点:如果某个密钥已过期,它仍可能会被计算在内。

http://redis.io/commands/dbsize

答案 2 :(得分:39)

警告:请勿在生产计算机上运行此程序。

在Linux机上:

redis-cli KEYS "*" | wc -l

注意:如下面的评论中所述,这是一个O(N)操作,因此在具有许多键的大型数据库上,您不应该使用它。对于较小的部署,它应该没问题。

答案 3 :(得分:21)

使用admin_page这将不会给你任何关键

  

返回当前所选数据库中的键数。

阅读更多Removing duplicates in a vector of strings

答案 4 :(得分:17)

要获取计数键总数,请使用以下命令:

127.0.0.1:6379> DBSIZE

答案 5 :(得分:14)

由于Redis 2.6支持lua,你可以获得这样的通配符密钥数量

eval "return #redis.call('keys', 'prefix-*')" 0

请参阅eval command

答案 6 :(得分:3)

dbsize()返回键的总数。

您可以通过随机抽样键快速估算与给定模式匹配的键数,然后检查它们中的哪一部分与模式匹配。

python中的示例;计算以prefix_开头的所有密钥:

import redis
r = redis.StrictRedis(host = 'localhost', port=6379)
iter=1000
print 'Approximately', r.dbsize() * float(sum([r.randomkey().startswith('prefix_') for i in xrange(iter)])) / iter

即使iter=100在我的情况下给出了不错的估计,但与keys prefix_相比却非常快。

改进是在每个请求上抽样1000个密钥,但保留总计数,以便在两个请求之后你将除以2000,在三个请求之后你将除以3000.因此,如果你的应用程序经常对匹配键的总数感兴趣,然后每次它越来越接近真实值。

答案 7 :(得分:1)

在Redis 2.6之后,INFO命令的结果按部分分割。在“键空间”部分,有“键”和“过期键”字段来说明有多少键。

答案 8 :(得分:0)

转到redis-cli并使用以下命令

info keyspace

这可能会帮助某人

答案 9 :(得分:-1)

eval "local count = redis.call('scan', 0, 'match', 'key:*:key', 'count', 10000) if count ~= 0 then return #count[2] end " 0

eval "local count = redis.call('sscan', 'key.key:all', 0, 'match', '*', 'count', 1000000) if count ~= 0 then return #count[2] end " 0