Redis 缓存命中率
内容:定义 -> 统计方式 -> Redis 实战 -> 生产建议
缓存命中率 = 命中缓存的请求数 ÷ 总请求数
公式:
缓存命中率 = hits / (hits + misses)
- hit:请求直接从缓存返回
- miss:缓存未命中,需要访问 DB 或后端服务
- 命中率高 -> DB 压力小、系统性能好
- 命中率低 -> 缓存价值不大,甚至是负担
🔍 查看命中/未命中次数
redis-cli INFO stats
关键字段:
keyspace_hits:123456
keyspace_misses:2345
📊 计算命中率
hit_ratio = keyspace_hits / (keyspace_hits + keyspace_misses)
✅ 特点
- Redis 官方统计
- 性能损耗极低
- 全局统计(整个实例)
⚠️ 注意:
- 重启 Redis 会清零
- 无法区分业务、接口、key 类型
思路
在代码中统计:
if (redis.get(key) != null):
hit++
else:
miss++
优点
- 可以按:
- 接口
- 业务模块
- key 前缀
- 用户维度
- 统计更精细
缺点
- 需要改代码
- 会增加一点点逻辑复杂度
例子
MONITOR
或
slowlog get
❌ 问题:
- 性能影响大
- 只适合排查问题
常见组合
- Redis INFO -> Exporter -> Prometheus -> Grafana
- 云厂商 Redis 监控
常见指标
redis_keyspace_hits_total
redis_keyspace_misses_total
实时计算命中率。
| 业务类型 | 推荐命中率 |
|---|---|
| 热点读多写少 | 95%+ |
| 一般业务 | 85% ~ 95% |
| 高动态数据 | 70% ~ 85% |
| < 70% | 需要优化 |
- key 过于分散
- 缺乏前缀规范
- key 频繁过期
- 命中率被拉低
- 热点直接走 DB
- 大量 miss
- 写了缓存,但读路径没用
配置类 / 字典类 / 权限类
TTL = base + random
减少 key 数量,提高访问效率。
user:profile:{id}
user:stat:{id}
缓存命中率是指请求直接从缓存返回的比例,通常用 hits / (hits + misses) 表示。
在 Redis 中可以通过 INFO stats 查看 keyspace_hits 和 keyspace_misses 来统计; 在生产环境中通常结合应用层统计或 Prometheus 监控进行业务级分析。
命中率越高,说明缓存效果越好,一般核心业务要求 90% 以上。
Q:Redis Cluster 下命中率怎么算?
👉 各节点分别统计,再聚合。
Q:命中率高一定好吗?
👉 不一定,可能缓存了无用数据,需结合 DB QPS。
Q:如何区分缓存无效和缓存穿透?
👉 业务层统计 miss 原因。