2. 缓存穿透:定义、产生原因与系统影响

2.1 定义

缓存穿透是指客户端请求的数据在缓存层和数据库层中都不存在,导致每次请求都直接穿透缓存层,直达后端数据库。由于缓存层无法命中,这些请求会持续对数据库造成压力,如同在缓存层上“打穿”了一个洞。

核心特征:缓存不命中 + 数据库也不存在该数据 → 请求绕过缓存,直击数据库。
缓存穿透 vs 正常请求流程 正常请求(数据存在) 客户端请求 缓存命中 返回数据 响应客户端 缓存穿透(数据不存在) 客户端请求 缓存未命中 查询数据库 返回空/异常

2.2 产生原因

缓存穿透通常由以下三类场景引发:

原因分类 具体描述 典型示例
恶意攻击 攻击者利用系统漏洞,批量请求不存在的数据 ID(如负数、超大值、随机字符串),绕过缓存直接攻击数据库。 请求 /user?id=-1 或 /product?id=abc123xyz
业务误操作 上游系统或运维人员错误地推送了不存在的数据主键,导致大量无效查询。 数据迁移后未同步缓存,旧 ID 仍被调用
缓存与数据库数据不一致 数据已被删除,但缓存未及时失效,请求到达缓存后未命中,再查询数据库也返回空。 用户注销后,缓存 TTL 未到,仍被频繁查询
排查要点:当监控发现缓存命中率突然从 95% 以上骤降至 60% 以下,且数据库 QPS 同步飙升时,应优先怀疑缓存穿透。

2.3 对系统的影响

缓存穿透对系统的影响是连锁式的,从缓存层逐步传导至数据库层,最终可能导致整个服务不可用。

缓存穿透影响传导链 无效请求涌入 缓存层无命中 数据库连接耗尽 连接池被占满 数据库响应变慢 查询排队超时 服务雪崩 整体不可用 各阶段具体影响 • 缓存层:缓存命中率急剧下降,大量连接被无效请求占用 • 数据库层:CPU 飙升、IO 负载增大、慢查询增多、连接池耗尽 • 应用层:请求响应时间从毫秒级退化到秒级甚至超时 • 业务层:正常用户请求被阻塞,核心功能不可用,造成直接经济损失

2.4 影响量化指标

以下指标可用于评估缓存穿透的严重程度:

指标 正常范围 穿透预警阈值 穿透严重阈值
缓存命中率 ≥ 95% < 90% < 70%
数据库 QPS 基线值 ± 20% 基线值 × 2 基线值 × 5
数据库连接池使用率 ≤ 60% > 80% > 95%
P99 响应时间 ≤ 50ms > 200ms > 1s