首页 文章

打印Redis中的键数

提问于
浏览
118

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

我知道

keys *

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

count keys *

9 回答

  • 39

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

    正如mVChr的评论中所提到的,你可以直接在redis-cli上使用 info keyspace .

  • 3

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

    缺点:如果密钥已过期,它可能仍然有效 .

    http://redis.io/commands/dbsize

  • 19

    WARNING: 不要在 生产环境 计算机上运行它 .

    在Linux机器上:

    redis-cli KEYS "*" | wc -l
    

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

  • 155

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

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

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

  • 1

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

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

    eval command

  • 13

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

    127.0.0.1:6379> DBSIZE
    
  • 9

    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.因此,如果你的应用程序对总数感兴趣经常匹配键,然后每次它越来越接近真实值 .

  • -1

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

  • 125
    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
    

相关问题