打印Redis中的键数

and*_*oot 141 redis

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

我知道

keys *
Run Code Online (Sandbox Code Playgroud)

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

count keys *
Run Code Online (Sandbox Code Playgroud)

hym*_*oth 181

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

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

  • 另外,如果已经在cli:`> info keyspace`中 (28认同)
  • 效果很好:redis-cli info | grep keys = (11认同)
  • `redis-cli 信息键空间 | grep ^db` (5认同)

sep*_*010 146

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

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

http://redis.io/commands/dbsize

  • 在那个例子中,`KEYS*`驱逐过期的密钥.此外,Redis _may_主动逐出一些过期的密钥,但不一定全部都是. (3认同)

rep*_*cus 42

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

在Linux机器上:

redis-cli KEYS "*" | wc -l
Run Code Online (Sandbox Code Playgroud)

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

  • 这是O(n)操作,有没有办法在O(1)中执行此操作? (23认同)
  • 不要在生产环境中的大型数据库上使用.[KEYS Command](http://redis.io/commands/KEYS) (21认同)
  • 有人会读到这个,有一天在生产箱上做这个而不考虑它然后把它推到边缘......可能已经发生了. (4认同)
  • 非常方便,并允许您过滤键. (3认同)
  • 这应该有一个免责声明,只能在非生产服务器上使用.否则你应该使用http://redis.io/commands/SCAN (2认同)
  • 可以确认:已经发生了。 (2认同)

Sau*_*tel 22

使用DBSIZE 这将给你没有关键

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

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


Pan*_*han 22

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

127.0.0.1:6379> DBSIZE
Run Code Online (Sandbox Code Playgroud)


jin*_*hao 15

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

eval "return #redis.call('keys', 'prefix-*')" 0
Run Code Online (Sandbox Code Playgroud)

请参阅eval命令

  • 使用`KEYS`来计算键(带或不带前缀)就像把婴儿扔出洗澡水一样. (8认同)
  • 对于 Lua 新手:此代码中的 [`#` 是 **长度运算符**](https://www.lua.org/manual/5.1/manual.html#2.5.5)。 (2认同)

小智 13

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

info keyspace
Run Code Online (Sandbox Code Playgroud)

它可能会帮助某人


AAT*_*RAN 12

  1. 显示数据库的名称以及键数:
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)
  1. 显示编号 所选数据库中的键数:
redis-cli dbsize
(integer) 12995
Run Code Online (Sandbox Code Playgroud)
  1. 显示整个 Redis 的统计信息:
redis-cli info
Run Code Online (Sandbox Code Playgroud)


osa*_*osa 5

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。因此,如果你的应用程序对总数感兴趣匹配键相当频繁,那么每次它都会越来越接近真实值。