Redis里怎么快速查键值对数量,简单又实用的方法分享
- 问答
- 2026-01-16 22:25:20
- 3
想知道Redis里存了多少个键值对,这是很常见的一个需求,比如你想看看缓存是不是快满了,或者只是单纯想了解一下数据量,这里就分享几个简单又实用的方法,咱们不用那些晦涩的专业术语,就用大白话讲清楚。
最直接的法子:DBSIZE 命令
如果你只是想知道当前数据库里总共有多少个键,那DBSIZE命令绝对是你的首选,这个方法简单到不能再简单了。
怎么用呢?打开你的Redis客户端(比如用redis-cli连上服务器),然后直接输入DBSIZE,敲下回车,数字立刻就出来了。
举个例子:
0.0.1:6379> DBSIZE
(integer) 150342
这行结果的意思就是,当前的数据库里一共有150342个键值对。
它为啥快?
根据Redis官方文档的说明,DBSIZE命令的速度是极快的,基本上是常数时间复杂度O(1),这是什么意思呢?就是说,不管你的Redis里存了1万个键还是10亿个键,你执行DBSIZE命令得到结果所花的时间几乎是一样的,为什么会这样?因为Redis在内部自己维护了一个计数器,每当你增加或者删除一个键的时候,这个计数器就会自动更新,所以DBSIZE命令根本不需要去遍历整个数据库,它只是把这个现成的数字读出来给你看而已,在你只关心总数的时候,用这个命令准没错。
什么时候需要注意?
虽然DBSIZE很快,但你要知道,Redis可以有多个数据库(默认是16个)。DBSIZE命令只告诉你当前所在的这个数据库的键数量,你可以用SELECT命令来切换不同的数据库,比如SELECT 1就切换到1号数据库,然后再用DBSIZE查看。
需要更详细情况时:INFO命令
你不仅想知道总共有多少键,还想了解一下Redis服务器更全面的状态,比如内存用了多少、连接了多少客户端等等,这时候,INFO命令就派上用场了。
输入INFO命令后,它会返回一大串信息,看起来可能有点乱,但我们可以只看我们关心的部分,你可以用INFO keyspace这个更精确的命令。
举个例子:
0.0.1:6379> INFO keyspace
# Keyspace
db0:keys=150342,expires=25,avg_ttl=1234567
这一小段结果就非常有用了,它告诉我们:
db0:表示0号数据库。keys=150342:这个数据库总共有150342个键。expires=25:其中有25个键是设置了过期时间的。avg_ttl=1234567:这些设置了过期的键,平均剩余存活时间大概是1234567毫秒。
你看,通过INFO keyspace,你不仅能拿到总数,还能顺带知道有多少键是“临时”的,这些信息也是Redis服务器实时统计好的,所以获取速度也非常快。
万不得已才用的方法:KEYS命令
你可能在网上搜的时候,会看到有人说用KEYS *命令,这个命令确实能列出所有的键,你再去数一下列表的长度,也能知道总数。
*我必须非常严肃地提醒你:在生产环境中,除非你非常清楚你在做什么,否则绝对不要使用`KEYS `命令!**
为什么呢?因为KEYS命令的工作原理是遍历整个数据库,就像你在一个巨大的仓库里,不开灯,非要用手电筒一个一个货架地找东西一样,如果你的数据库里有几百万甚至上千万个键,这个命令可能会让Redis服务器“卡住”好几秒钟,在这段时间内,Redis就无法处理其他任何来自客户端的请求了,这很可能导致你的线上服务瘫痪或超时。
根据Redis官方文档的警告,KEYS命令只能用于调试环境或者确保数据量极小的情况下,它的速度是O(N),N就是数据库中键的数量,数据量一大,速度会呈线性增长,非常可怕。
那如果我真的需要模式匹配查找某些键怎么办?Redis提供了一个更安全的替代命令叫做SCAN。SCAN命令也是迭代遍历,但它是分步进行的,每次只返回一小部分键,不会长时间阻塞服务器,如果你仅仅是为了统计总数,那还是用DBSIZE最好,SCAN通常用于需要逐个处理键的场景。
简单总结一下:
- 只想知道总数,图快图省事: 用
DBSIZE,这是最推荐的方法。 - 想顺便看看数据库的整体键空间情况(比如有多少带过期时间的): 用
INFO keyspace。 - 没事儿别用:
KEYS *命令,尤其是在生产环境,风险很高。
最后再提一点,这些命令给出的都是当前这个Redis实例、当前你选中的这个数据库里的数据情况,如果你的数据分布在Redis集群(Redis Cluster)上,那么情况会复杂一些,因为数据是分片存储在多个节点上的,你需要把每个节点的键数量加起来才能得到全局的总数,对于大多数单实例或者主从架构的Redis来说,上面说的DBSIZE和INFO命令就完全够用了,希望这些简单直接的方法能帮到你。

本文由称怜于2026-01-16发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://www.haoid.cn/wenda/82041.html
