用Redis集群怎么快速知道你到底有多少Key,统计那些零散的Key数目方法分享
- 问答
- 2026-01-13 08:53:45
- 3
综合自Redis官方文档、多个技术社区如Stack Overflow、CSDN博客以及知乎上的相关讨论帖)
想知道一个Redis集群里到底有多少个key,这个问题听起来简单,但做起来确实有点门道,和单机Redis不一样,集群是把数据分片存放在多个节点上的,所以你没法用一个简单的命令就得到全局的总数,下面我就分享几种常用的方法,各有各的适用场景和优缺点。
第一种方法:使用 redis-cli 工具的 --bigkeys 或 --memkeys 参数,并结合集群模式。
这个方法虽然不是直接为了精确统计key的数量,但它是一个快速了解集群key分布和内存占用情况的利器,你没法用一个命令扫完全集群,但可以对每个节点分别执行。
具体操作是这样的:你先用 redis-cli -c -h your_redis_host -p your_redis_port cluster nodes 命令列出集群里所有主节点的地址和端口,对每一个主节点,依次执行类似这样的命令:
redis-cli -h [node_ip] -p [node_port] --bigkeys --i 0.1
这里的 --i 0.1 意思是每扫描100个key就休息0.1秒,避免对线上服务造成太大压力,执行完后,这个命令会给出该节点上每种数据类型(比如string, hash, list等)最大的key是哪个,以及该节点上大概的key总数。
(来源:Redis官方文档关于 redis-cli 工具的说明)
优点: 相对安全,对服务影响小,顺带还能发现可能存在的“大key”,一举两得。 缺点: 得到的是各个节点的key数,你需要手动把它们加起来才能得到总和,这个数字是扫描过程中的一个估算值,在非常高并发的生产环境下,可能不是绝对精确的瞬时值。
第二种方法:使用 DBSIZE 命令,逐个节点查询后汇总。
这是最直接想到的方法。DBSIZE 命令能返回当前数据库的key数量,在集群模式下,每个节点只负责一部分slot(哈希槽)的数据,所以每个节点的 DBSIZE 结果只是全局key数的一部分。
操作步骤和第一种方法类似:先获取所有主节点的连接信息,然后逐个节点连接上去,执行 DBSIZE 命令,最后把每个节点返回的数字加起来。
(来源:几乎所有关于Redis集群管理的入门教程都会提到这个方法)
优点: 命令非常简单,结果直观,理论上,如果在你逐个查询的极短时间内没有大量的key增减,汇总后的数字是相对准确的。 缺点: 非常繁琐,需要手动操作多个步骤,更重要的是,它不是一个原子操作,在你查询第一个节点和最后一个节点的间隙里,集群的key数量可能已经发生了变化,导致最终的总和是一个“不一致”的快照,对于要求精确统计的场景不太适用。

第三种方法:编写脚本,使用 SCAN 命令进行遍历统计。
这是最推荐用于获取相对准确key数量的方法,尤其适合自动化脚本。SCAN 命令是一个增量式的迭代器,它不会像 KEYS * 命令那样一次性锁住数据库导致服务阻塞,而是分批次地返回key。
你需要为集群里的每一个主节点编写一个扫描逻辑,脚本的大致思路是:连接到一个节点,使用 SCAN 命令配合游标(cursor),遍历该节点上所有的key,同时用一个计数器累加,遍历完一个节点后,再处理下一个节点,最后汇总所有节点的计数。
(来源:Redis官方文档强烈推荐使用 SCAN 代替 KEYS 命令,社区有大量现成的Python、Shell脚本示例)
优点: 相对于 DBSIZE 的瞬间值,SCAN 遍历虽然慢一点,但能让你在遍历过程中对key的数量有更稳定的感知,可以通过控制遍历速度来减少对服务的性能影响,准确性较高。
缺点: 需要自己写脚本,有一定技术门槛,扫描整个集群需要时间,在此期间新增或删除的key可能会被漏计或重复计数(但通常影响很小),如果集群key数量巨大,扫描耗时可能会比较长。
第四种方法:利用Redis的 INFO 命令抓取信息。

Redis的 INFO 命令能输出海量的服务器信息和统计指标,其中有一项叫做 keyspace,它会显示每个数据库的key数量,在集群中,每个节点通常只使用db0。
你可以写一个脚本,连接到每个主节点,执行 INFO keyspace 命令,然后从返回的结果中解析出 keys=XXX 这个数字,再进行加总。
(来源:Redis官方文档对INFO命令的详解)
优点: 命令执行非常快,几乎瞬间返回,比逐个 DBSIZE 方便一些,可以脚本化。
缺点: 和 DBSIZE 一样,存在“非原子性”的问题,统计结果是非一致性的快照,返回的信息需要额外解析。
- 想快速、粗略地看个大概,同时排查大key:用第一种
--bigkeys方法。 - 想快速得到一个大概的总数,不怕手动操作:用第二种或第四种方法(
DBSIZE或INFO keyspace),但要知道结果可能不精确。 - 需要相对准确、对线上服务影响可控,并且愿意写脚本:用第三种
SCAN遍历的方法,这是生产环境最平衡和可靠的选择。
最后严重提醒一点:*绝对不要在线上生产环境的Redis集群上使用 `KEYS ` 命令!** 这个命令会一次性列出所有key,如果key数量很多,会导致Redis服务短暂阻塞,可能引发严重的线上故障,无论多着急,都不要用这个命令。
(来源:这是Redis使用的基本禁忌,所有官方和社区资料都会强调这一点)
希望这些零散的方法分享能帮到你,让你能快速知道你的Redis集群里到底藏了多少个“宝贝”key。
本文由颜泰平于2026-01-13发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://haoid.cn/wenda/79833.html
