首页/数据/Redis 进阶速查/键空间指标与内存互证
内存与管理99 条

键空间指标与内存互证

INFO keyspace 给出各库键数与带 TTL 键比例,与 used_memory 交叉验证可判断增长来自键数还是单键体积。

Redis 进阶速查数据更新于 2026-10-13

键空间指标是什么

INFO keyspace 为每个数据库输出一行统计:键总数、设置了过期时间的键数、平均剩余存活时间。它是内存增长归因最直接的一组指标——把键数曲线和 used_memory 曲线放在一起,就能区分「键变多了」与「单个键变大了」这两种根因完全不同的增长。

基本信息

命令INFO keyspace
输出形态每个库一行:dbN:keys=...,expires=...,avg_ttl=...
配套命令DBSIZE(当前库键数)、SELECT / -n 切库
适用版本长期存在,字段随版本略有增减
权限普通连接即可

典型使用场景

  • 内存告警时判断是新增键还是已有键膨胀
  • 核对批量导入、数据迁移是否真的落到目标库
  • 检查带 TTL 的键占比,识别「写入没带过期」的缓存泄漏
  • 容量评估与扩容前的规模摸底
  • 排查某个库被意外写入或误连错库

采集与交叉验证

采集与交叉验证
redis-cli INFO keyspace                 # 每库的 keys / expires / avg_ttl
redis-cli DBSIZE                         # 当前库键数,与 db0 行对照
redis-cli -n 2 DBSIZE                    # 用 -n 切库核对其他库
redis-cli INFO keyspace | grep '^db0'    # 单行取值,便于脚本采样比较
redis-cli INFO memory | grep used_memory_human
redis-cli INFO stats  | grep -E 'expired_keys|evicted_keys'

输出逐列读法

字段含义正常与异常
keys该库键总数稳定增长符合业务写入;突然跳变要追来源
expires设置了 TTL 的键数量缓存场景应占多数,接近 0 说明写入没带过期
avg_ttl带过期键的平均剩余存活时间(估算,毫秒级)持续变大意味着 TTL 偏长或写入时间集中
dbN库编号只用 db0 的实例出现其他库,多半是配置或误写
avg_ttl 是抽样估算值,键量小或过期时间分布散时波动明显,只能看趋势,不要拿它做精确判断。
归因口诀:键数稳定而内存上涨,往单键体积、编码膨胀、碎片方向查;键数上涨而平均体积稳定,往写入量、重复键与键命名方向查。

配套采集项

  • 键数曲线与 used_memory 曲线放在同一张图上
  • expires 占比与 expired_keys 增速对照
  • evicted_keys 是否增长,判断是否触及 maxmemory
  • 业务侧写入 QPS 与唯一键数量,作为外部参照
采集键空间指标是只读的,但要避免用 KEYS 之类命令做全量统计;它会阻塞主线程,规模稍大就影响线上。

易错点

  • 多库实例只盯单个库,遗漏其他库的增长
  • 把 avg_ttl 当精确 TTL 使用,忽略它本身是估算值
  • 键数口径会随过期与淘汰波动,不与业务写入量对照就下结论
  • 只看内存总量不看 expires 比例,缓存泄漏长期未被发现
  • 用 KEYS 命令做全量点数,造成线上阻塞

数据来源与参考

  • Redis 官方文档:INFO keyspace 说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌