大促演练中模拟缓存绕过核心是精准控制请求是否走缓存、在哪层被绕过及对下游影响,目标是验证系统在穿透、击穿、雪崩下的容错与降级能力,而非制造随机故障。

大促演练中模拟缓存绕过,核心不是“让缓存失效”,而是精准控制请求是否走缓存、在哪一层被绕过、绕过后如何影响下游。目标是验证系统在穿透、击穿、雪崩等真实压力下的容错与降级能力,而不是制造随机故障。
明确要模拟的绕过类型
先锁定你要测的具体场景,每种绕过对应不同链路干预点:
- 穿透绕过:构造大量数据库不存在的 key(如非法 ID、负数、超长字符串),确保缓存未命中且 DB 查询返回空,不写入缓存
- 击穿绕过:对一个已知热点 key,在其 TTL 到期前 100ms 主动删除或使其自然过期,再瞬间发起高并发请求
- 雪崩绕过:批量清除一组具有相同过期时间的 key(比如按业务域前缀扫描 + DEL),或直接停掉 Redis 实例(需有 fallback)
- 多级缓存绕过:跳过本地缓存(如 Caffeine),直连分布式缓存;或跳过 Tair/Redis,直查 RDS
在代码层做可控绕过
不依赖运维操作,便于自动化压测和 CI 集成:
- 在缓存访问 SDK 中增加灰度开关,支持按 traceId、userAgent 或参数特征强制 bypass 缓存
- 对测试请求加特殊 header(如 X-Bypass-Cache: penetrate),网关层识别后跳过缓存逻辑,直调下游
- 在 DAO 层埋点:当查询参数满足规则(如 id 32),自动跳过 getFromCache(),走 selectFromDB()
在基础设施层做隔离式绕过
贴近生产真实态,适合全链路压测:
- 用流量染色 + 网关路由策略:将压测流量打到独立缓存集群(如空的 Redis 实例),天然无数据,实现穿透效果
- 利用 Tair 的命名空间或 Redis 的 database 切换,为压测环境分配专属 db,不预热、不同步,保证“冷启动”状态
- 在 SLB 或 Service Mesh 层配置故障注入规则:对特定 path 的 GET 请求,按比例返回 503 并透传至 DB,模拟缓存不可用
关键验证点不能漏
绕过只是手段,重点看系统反应是否符合预期:
- DB QPS 是否突增?连接池是否打满?慢 SQL 是否出现?
- 熔断器(如 Sentinel/Hystrix)是否触发?降级逻辑是否生效(如返回默认值、兜底页面)?
- 缓存重建是否串行化(击穿防护)?空值是否被缓存(穿透防护)?
- 监控指标是否及时报警:缓存命中率骤降、DB load spike、线程池阻塞数上升


















