2. 缓存基础原理:核心概念与灾备巡检视角
在灾备缓存巡检与 NetPolicy 准入核验场景中,缓存系统的稳定性直接决定业务连续性。本节从四个核心指标与异常现象入手,建立缓存健康度的量化评估基础。
2.1 缓存命中率(Cache Hit Ratio)
缓存命中率是衡量缓存效率的首要指标,定义为从缓存成功获取数据的请求占总请求的比例。
| 指标 | 公式 | 健康阈值(灾备场景) | 巡检关注点 |
|---|---|---|---|
| 命中率 | Hit / (Hit + Miss) × 100% | ≥ 90% | 突降 > 10% 需告警 |
| 未命中率 | Miss / (Hit + Miss) × 100% | ≤ 10% | 持续上升可能预示缓存污染或容量不足 |
灾备巡检要点: 当 NetPolicy 准入策略变更后,缓存命中率若在 5 分钟内下降超过 15%,应立即触发缓存预热流程,防止后端数据库被突发流量压垮。
2.2 缓存穿透(Cache Penetration)
缓存穿透指查询一个根本不存在的数据,缓存层无法命中,请求直接穿透到后端存储。大量此类请求会导致数据库压力剧增,甚至引发级联故障。
- 典型场景: 攻击者构造大量不存在的 Key(如随机用户 ID)发起请求。
- 灾备影响: 数据库连接池耗尽,主从复制延迟增大。
- 巡检检测: 监控缓存 Miss 率与数据库 QPS 的比值,若 Miss 率 > 30% 且数据库 QPS 同步飙升,则判定为穿透。
NetPolicy 联动: 在准入核验阶段,对来源 IP 的请求 Key 分布进行熵值分析,若 Key 空间呈现均匀随机分布(非业务规律),可提前阻断恶意穿透流量。
2.3 缓存雪崩(Cache Avalanche)
缓存雪崩指大量缓存 Key 在同一时间过期失效,或缓存节点整体宕机,导致所有请求瞬间涌入数据库。
| 触发原因 | 灾备表现 | 巡检指标 |
|---|---|---|
| 大量 Key 统一过期时间 | 数据库连接数瞬间打满 | 过期 Key 数量时间序列 |
| 缓存集群节点宕机 | 缓存命中率断崖式归零 | 节点存活状态 + 命中率 |
| 网络分区导致缓存不可达 | 请求超时堆积 | TCP 重传率 + 响应延迟 |
巡检红线: 缓存雪崩恢复后,必须执行“缓启动”策略——逐步放量恢复缓存预热,禁止一次性全量回填,否则极易引发二次雪崩。
2.4 缓存击穿(Cache Breakdown / Hotkey Invalid)
缓存击穿特指一个热点 Key 在失效的瞬间,大量并发请求同时访问该 Key,导致这些请求全部穿透到数据库。
- 与雪崩区别: 雪崩是大量 Key 失效,击穿是单个热点 Key 失效。
- 典型场景: 秒杀商品详情、热搜榜单、全局配置项。
- 灾备巡检手段:
- 识别热点 Key(访问频率 > 1000 QPS 的 Key)。
- 监控热点 Key 的 TTL 剩余时间。
- 设置互斥锁(Mutex)或逻辑过期时间。
// 伪代码:互斥锁防止缓存击穿
public String getWithMutex(String key) {
String value = cache.get(key);
if (value == null) {
// 尝试获取分布式锁
if (redis.setnx("lock:" + key, "1", 3, TimeUnit.SECONDS)) {
value = db.query(key);
cache.set(key, value, 60, TimeUnit.SECONDS);
redis.del("lock:" + key);
} else {
// 等待 50ms 后重试
Thread.sleep(50);
return getWithMutex(key);
}
}
return value;
}
2.5 四类异常对比总览
| 异常类型 | 失效范围 | 失效原因 | 数据库压力特征 | NetPolicy 可检测特征 |
|---|---|---|---|---|
| 缓存穿透 | 单个不存在 Key | 查询不存在数据 | 持续均匀压力 | Key 空间熵值异常高 |
| 缓存雪崩 | 大量 Key 同时失效 | 统一过期时间 / 节点宕机 | 瞬间洪峰压力 | 命中率断崖 + 连接数暴涨 |
| 缓存击穿 | 单个热点 Key | 热点 Key 过期 | 单 Key 并发穿透 | 特定 Key 请求频率突变 |
| 缓存命中率下降 | 全局或分片 | 容量不足 / 数据淘汰 | 渐进式压力上升 | 逐出(Eviction)计数增长 |