2. 缓存命中率基础概念:缓存命中与未命中、命中率计算公式、缓存穿透/击穿/雪崩
2.1 缓存命中与未命中
在云原生灾备架构中,缓存是降低后端存储负载、加速数据恢复的关键组件。每一次缓存访问都会产生两种结果:命中或未命中。
- 缓存命中(Cache Hit):请求的数据在缓存中存在,直接从缓存返回,无需访问后端数据库或灾备存储。这是最理想的状态,延迟最低(通常 < 1ms),对后端无压力。
- 缓存未命中(Cache Miss):请求的数据在缓存中不存在,必须穿透到后端存储(如 MySQL、对象存储、灾备副本)获取数据,同时可能触发回填缓存操作。未命中会显著增加响应延迟(可能达到 10-100ms 甚至更高),并消耗后端资源。
巡检要点:在灾备场景下,缓存未命中不仅影响性能,还可能触发大量并发回源请求,导致灾备存储过载。SRE 应重点关注未命中率突增的巡检指标。
2.2 命中率计算公式
缓存命中率是衡量缓存效率的核心指标,计算公式如下:
缓存命中率(%) = (缓存命中次数 / (缓存命中次数 + 缓存未命中次数)) × 100%
在实际巡检中,通常使用以下衍生指标进行多维度评估:
| 指标名称 | 计算公式 | 健康阈值(灾备场景) | 说明 |
|---|---|---|---|
| 整体命中率 | 总命中 / 总请求 | ≥ 90% | 反映全局缓存效率 |
| 热点 Key 命中率 | 热点命中 / 热点请求 | ≥ 99% | 灾备恢复时的高频数据 |
| 分片命中率 | 单分片命中 / 单分片请求 | ≥ 85% | 检测缓存分布是否均匀 |
| 回源率 | 未命中 / 总请求 | ≤ 10% | 回源率 = 1 - 命中率 |
避坑指南:不要只关注整体命中率。在灾备切换或数据恢复期间,热点 Key 的命中率会急剧下降,此时整体命中率可能仍维持在 80% 以上,但实际后端已承受巨大压力。必须按 Key 粒度或分片粒度进行巡检。
2.3 缓存穿透、击穿与雪崩
这三种异常场景是缓存巡检中必须识别的核心风险,它们会导致缓存失效并引发后端存储过载。以下通过对比表格和流程图进行详细说明。
| 异常类型 | 触发条件 | 影响范围 | 典型表现(灾备场景) |
|---|---|---|---|
| 缓存穿透 | 请求的数据在缓存和数据库中都不存在 | 单个 Key 反复穿透 | 恶意请求或查询不存在的历史灾备快照 |
| 缓存击穿 | 热点 Key 在缓存中过期失效,大量并发请求同时穿透 | 单个热点 Key | 灾备恢复时,某个核心业务数据的缓存恰好过期 |
| 缓存雪崩 | 大量缓存 Key 在同一时间过期失效,或缓存节点宕机 | 大面积缓存失效 | 灾备演练后统一回源,大量 Key 同时过期 |
2.4 灾备场景下的特殊风险
在云原生灾备环境中,缓存穿透、击穿和雪崩会带来比普通业务更严重的后果:
- 灾备恢复期间:大量历史数据被重新加载,缓存处于冷启动状态,命中率极低,极易引发雪崩。
- 演练回源:灾备演练结束后,大量 Key 同时过期回源,数据库瞬间压力暴增。
- 数据一致性校验:巡检脚本频繁查询不存在的 Key 进行校验,可能造成缓存穿透。
巡检建议:在灾备缓存巡检中,应针对上述三种异常设置独立的告警规则。例如:当单 Key 回源率超过 50% 且持续 30 秒时,触发缓存击穿告警;当整体回源率超过 20% 且无热点 Key 时,触发缓存雪崩预警告警。
2.5 关键巡检指标速查
在云原生灾备缓存巡检中,SRE 需要重点关注以下指标,并设置对应的告警阈值:
| 巡检指标 | 采集方式 | 告警阈值(灾备场景) | 关联风险 |
|---|---|---|---|
| 整体缓存命中率 | Prometheus + Redis Exporter | < 85% 告警 | 缓存效率下降 |
| 热点 Key 命中率 | Redis 慢查询 + 热点分析 | < 95% 告警 | 缓存击穿风险 |
| 回源请求数 / 秒 | Redis 命令统计 | 突增 200% 告警 | 缓存穿透 / 雪崩 |
| 缓存过期 Key 数量 | Redis info 中的 expired_keys | 突增 300% 告警 | 缓存雪崩预兆 |
| 数据库 QPS | 数据库监控 | 超过基线 150% 告警 | 后端过载 |
最佳实践:在灾备巡检平台门户中,建议将上述指标以仪表盘形式集中展示,并关联告警事件。当缓存命中率低于阈值时,自动触发巡检脚本,分析是穿透、击穿还是雪崩,并给出对应的调优建议(如布隆过滤器、互斥锁、过期时间打散等)。