模拟 Redis 挂了、数据刚好过期、100 个请求同时打进来,这套单元测试怎么搭
缓存层重构的关键在于用可控的 Mock Redis Client 精确模拟异常态,而非简单返回 null。通过接口化底层操作,可模拟缓存未命中、连接超时和数据过期三种场景,并利用并发原语发起 100 个请求,验证数据库仅穿透一次。测试需覆盖雪崩延迟、脏数据清理等边界情况,并集成到 CI 中,开启 race detector 以捕获竞态条件。
共 3 篇文章
缓存层重构的关键在于用可控的 Mock Redis Client 精确模拟异常态,而非简单返回 null。通过接口化底层操作,可模拟缓存未命中、连接超时和数据过期三种场景,并利用并发原语发起 100 个请求,验证数据库仅穿透一次。测试需覆盖雪崩延迟、脏数据清理等边界情况,并集成到 CI 中,开启 race detector 以捕获竞态条件。
缓存预热并非万能解药,策略不当反而会放大风险。全量加载启动慢但运行稳定,需配合TTL打散防雪崩;懒加载启动快但雪崩时毫无自保能力,必须依赖限流熔断;增量加载折中,但热点识别不准则效果大打折扣。选择策略需权衡启动延迟与数据库压力,并针对各自弱点配套保护机制。
缓存雪崩源于大量key同时过期导致请求穿透至数据库。解决方案包括:用key哈希值生成固定随机抖动,将过期时间分散到宽窗口;对热点key采用本地缓存、Redis和数据库三级架构,并提前异步刷新避免集中失效。该策略适用于高QPS、数据库脆弱的场景,需权衡一致性与复杂度。