缓存击穿(Cache Breakdown / Stampede)

缓存击穿指的是某个热点 Key 被大量并发访问,在其缓存失效或过期的瞬间,所有请求同时打到数据库,造成数据库压力骤增甚至宕机,就像缓存这座“屏障”被“凿开”一个洞。

常见解决方案整理与补充

    1. 互斥锁(Mutex / Distributed Lock)
      原理:当缓存失效时,仅允许一个线程获取锁,去查询数据库并重建缓存,其余线程等待或返回缓存结果。
      实现方式: 单体服务用互斥锁,分布式用分布式锁
      Tips: 采用“双重判定锁”(Double-checked locking):获取锁后再次检查缓存,避免重复查询数据库。
      优缺点:
      优点:有效防止大量并发查询数据库
      缺点:实现较复杂,可能带来性能瓶颈。
    1. 热点数据永不过期 / 逻辑过期 + 后台刷新
      物理永不过期:将热点 Key 设置为永不过期,确保缓存一直命中,定期由后台异步任务刷新缓存数据
      优缺点:
      优点:避免缓存穿透,保持高可用
      缺点:增加实现复杂度,需处理数据一致性问题与过期逻辑。
    1. 热点数据预加载(Cache Preload / Warming)
      机制:在系统启动或业务高峰到来前,把已知的热点数据加载到缓存中,避免初次访问击穿缓存。