Redis查看键数量
Redis查看键数量
引言
排查内存占用、统计缓存规模、清理过期数据前,先要看清当前库有多少键、某前缀下有多少键。不同命令代价差别很大,生产环境绝对不能用KEYS全量扫描,否则会阻塞Redis。
统计当前库总键数:DBSIZE
DBSIZE
返回当前数据库的键总数,是O(1)操作,底层直接读计数器,生产环境可安全使用。
切换库再统计
SELECT 2
DBSIZE
Redis默认0到15共16个逻辑库,DBSIZE只统计当前选中的库。
统计指定前缀数量:SCAN配合
SCAN 0 MATCH user:* COUNT 100
SCAN游标式分批遍历,不会阻塞主线程,配合MATCH按前缀过滤,COUNT是每批建议数量而非精确数量。
错误做法:KEYS全扫
# 生产禁止
KEYS user:*
KEYS是O(n)一次性遍历全部键,键多时会长时间阻塞,线上直接用可能引发雪崩。
估算内存与键分布
INFO keyspace
一次性返回所有库的键数量、过期键比例、平均TTL,适合整体巡检。
按类型统计
SCAN 0 TYPE string COUNT 500
SCAN支持按数据类型过滤,筛选string、hash、list等。
脚本批量统计前缀
redis-cli --scan --pattern 'order:*' | wc -l
命令行用--scan流式遍历,管道交给wc计数,比KEYS安全。
注意事项
- DBSIZE是O(1)放心用,KEYS是O(n)生产禁;
- SCAN结果可能重复,业务去重;
- DBSIZE不含已过期未清理键,近似看规模;
- 多库要逐个SELECT统计;
- 大库统计用INFO keyspace代替自己遍历;
- 删前缀键也用SCAN加DEL,别配KEYS。
总结
DBSIZE O(1)看当前库总数,SELECT切库分别统计,指定前缀用SCAN游标遍历,生产禁用KEYS全扫,INFO keyspace看全库分布和TTL,命令行用--scan加wc计数。核心是别用阻塞命令,SCAN分批处理允许重复需去重,多库分别统计,清理键同样走SCAN。