打印Redis中的密钥数量

有没有办法打印Redis中的密钥数量?

我知道

keys * 

但是,这似乎有点重的重量。 – 鉴于Redis是一个关键的价值商店,也许这是做到这一点的唯一方法。 但是我仍然希望看到一些沿用的东西

 count keys * 

您可以发出INFO命令,该命令返回有关服务器的信息和统计信息。 看到这里的例子输出。

DBSIZE返回键的数量,它更容易parsing。

下行:如果钥匙已经过期,可能仍然会计数。

http://redis.io/commands/dbsize

在Linux上:

 redis-cli KEYS "*" | wc -l 

注意:正如下面的评论中提到的,这是一个O(N)操作,所以在一个有很多键的大型数据库中,你不应该使用这个。 对于较小的部署,应该没问题。

既然Redis 2.6支持lua,你可以得到这样的通配符数

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

看eval命令

使用DBSIZE这会给你没有关键

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

阅读更多http://redis.io/commands/dbsize

dbsize()返回键的总数。

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

在Python中的例子; 对从prefix_开始的所有密钥进行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.因此,如果你的应用程序对总数相当频繁的匹配键,那么每次都会越来越接近真实值。

在Redis 2.6之后,INFO命令的结果被分割。 在“密钥空间”部分,有“密钥”和“过期密钥”字段来告诉有多less密钥在那里。

 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 

jingchao解释说,在Lua解释器中使用EVAL是关键通配符总数的一个很好的select。

你可以在PHP中做到这一点:

 $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $count = $redis->eval('return table.getn(redis.call("keys", "PHPREDIS_SESSION:*"))'); 

更多的信息可以在这里find: 与Kohana PHP的Redis会议 。

以下是通过前缀显示关键数字的仪表板。

Redis仪表板