键空间指标是什么
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 之类命令做全量统计;它会阻塞主线程,规模稍大就影响线上。