Skip to main content
☘️ Septvean's Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Redis 缓存命中率

内容:定义 -> 统计方式 -> Redis 实战 -> 生产建议

一、什么是缓存命中率(Cache Hit Ratio)?

✅ 定义

缓存命中率 = 命中缓存的请求数 ÷ 总请求数

公式:

缓存命中率 = hits / (hits + misses)

  • hit:请求直接从缓存返回
  • miss:缓存未命中,需要访问 DB 或后端服务

✅ 直观理解

  • 命中率高 -> DB 压力小、系统性能好
  • 命中率低 -> 缓存价值不大,甚至是负担

二、Redis 中如何统计缓存命中率(重点)

方式一:Redis 内置统计(最标准、最常用)

🔍 查看命中/未命中次数

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 前缀
  • 用户维度
  • 统计更精细

缺点

  • 需要改代码
  • 会增加一点点逻辑复杂度

方式三:Redis 命令监控(不推荐生产)

例子

MONITOR

slowlog get

❌ 问题:

  • 性能影响大
  • 只适合排查问题

方式四:监控系统(生产级方案)

常见组合

  • Redis INFO -> Exporter -> Prometheus -> Grafana
  • 云厂商 Redis 监控

常见指标

redis_keyspace_hits_total
redis_keyspace_misses_total

实时计算命中率。

三、缓存命中率多少算合理?

业务类型 推荐命中率
热点读多写少 95%+
一般业务 85% ~ 95%
高动态数据 70% ~ 85%
< 70% 需要优化

四、命中率低的常见原因(必考)

1️⃣ key 设计不合理

  • key 过于分散
  • 缺乏前缀规范

2️⃣ TTL 太短

  • key 频繁过期
  • 命中率被拉低

3️⃣ 没有缓存热点数据

  • 热点直接走 DB

4️⃣ 缓存穿透 / 击穿 / 雪崩

  • 大量 miss

5️⃣ 使用 Redis 但没有读缓存

  • 写了缓存,但读路径没用

五、如何提升缓存命中率(实战)

1️⃣ 热点数据永不过期 / 逻辑过期

配置类 / 字典类 / 权限类

2️⃣ 合理 TTL + 随机值

TTL = base + random

3️⃣ 使用 Hash / Pipeline

减少 key 数量,提高访问效率。

4️⃣ 业务前缀聚合

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 原因。