缓存击穿的危险不在于“缓存没有命中”本身,而在于热点键失效的瞬间,很多请求会同步把压力传递给下游。
先识别真正的热点
如果一个键平时 QPS 很低,偶发未命中通常只是普通的缓存穿透路径。只有当同一键在短时间内拥有大量并发读请求时,失效窗口才会形成需要专门处理的击穿问题。
让重建动作只有一个执行者
常见的第一道防线是互斥:第一个请求获得重建资格,其他请求短暂等待、返回旧值,或进行有限次数重试。关键不在锁的形式,而在于锁、缓存 TTL 与数据加载时间要有一致的超时预算。
为过期策略留出缓冲
热点数据可以采用逻辑过期:缓存值标记为“需要刷新”,但仍然允许读取旧值,同时异步触发一次更新。这样读路径不会在失效点突然把压力转移到数据库。
用指标验证防线
观察命中率并不够,还要记录热点键的并发重建数、等待时长、数据库回源量和失败比例。只有这些指标同时稳定,才说明缓存真正承担了保护下游的职责。