打印Redis中的密钥数量
有没有办法打印Redis中的密钥数量?
我知道
keys *
但是,这似乎有点重的重量。 – 鉴于Redis是一个关键的价值商店,也许这是做到这一点的唯一方法。 但是我仍然希望看到一些沿用的东西
count keys *
您可以发出INFO命令,该命令返回有关服务器的信息和统计信息。 看到这里的例子输出。
在Linux上:
redis-cli KEYS "*" | wc -l
注意:正如下面的评论中提到的,这是一个O(N)操作,所以在一个有很多键的大型数据库中,你不应该使用这个。 对于较小的部署,应该没问题。
既然Redis 2.6支持lua,你可以得到这样的通配符数
eval "return #redis.call('keys', 'prefix-*')" 0
看eval命令
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会议 。
以下是通过前缀显示关键数字的仪表板。