有没有办法在Redis中打印键数?
我知道
keys *
Run Code Online (Sandbox Code Playgroud)
但这似乎有点重. - 鉴于Redis是一个关键的价值商店,也许这是唯一的方法.但我仍然希望看到类似的东西
count keys *
Run Code Online (Sandbox Code Playgroud)
sep*_*010 146
DBSIZE 返回键的数量,它更容易解析.
缺点:如果密钥已过期,它可能仍然有效.
http://redis.io/commands/dbsize
rep*_*cus 42
警告:请勿在生产计算机上运行此程序.
在Linux机器上:
redis-cli KEYS "*" | wc -l
Run Code Online (Sandbox Code Playgroud)
注意:如下面的评论中所述,这是一个O(N)操作,因此对于具有许多键的大型DB,您不应该使用它.对于较小的部署,它应该没问题.
jin*_*hao 15
由于支持Redis 2.6,lua,你可以获得这样的通配符密钥数量
eval "return #redis.call('keys', 'prefix-*')" 0
Run Code Online (Sandbox Code Playgroud)
请参阅eval命令
AAT*_*RAN 12
redis-cli info keyspace
# Keyspace
db0:keys=12995,expires=0,avg_ttl=0
db12:keys=5524396,expires=5,avg_ttl=45201
Run Code Online (Sandbox Code Playgroud)
redis-cli dbsize
(integer) 12995
Run Code Online (Sandbox Code Playgroud)
redis-cli info
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
即使iter=100在我的情况下给出了一个不错的估计,但与keys prefix_.
一个改进是在每个请求上采样 1000 个键,但保持总数,这样在两次请求后你将除以 2000,在三个请求后你将除以 3000。因此,如果你的应用程序对总数感兴趣匹配键相当频繁,那么每次它都会越来越接近真实值。
| 归档时间: |
|
| 查看次数: |
129777 次 |
| 最近记录: |