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 同时过期
缓存穿透 / 击穿 / 雪崩 对比流程图 缓存穿透 请求不存在的数据 缓存未命中 数据库查询(不存在) 每次穿透都查库 解决方案:布隆过滤器 缓存击穿 热点 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% 告警 后端过载
最佳实践:在灾备巡检平台门户中,建议将上述指标以仪表盘形式集中展示,并关联告警事件。当缓存命中率低于阈值时,自动触发巡检脚本,分析是穿透、击穿还是雪崩,并给出对应的调优建议(如布隆过滤器、互斥锁、过期时间打散等)。