Skip to content

缓存注意事项

缓存穿透

✅ 现象:请求访问 不存在 的数据(不在缓存中,也不在数据库中),绕过缓存直接冲击数据库

🔧 解决方案:

  1. 参数校验 & 用户鉴权。
  2. 缓存空值:即时是数据库中不存在的数据,也可以在缓存中设置一个短时空值(例如expire:30s),以防止恶意攻击。

缓存击穿

✅ 现象:热点 Key 突然失效,导致大量请求落到到数据库上。 🔧 解决方案:

  1. 互斥锁(Redis setnx):互斥锁,保证只有一个线程能够获取到锁,其他线程等待。或限制QPS。
  2. 逻辑过期时间,逻辑处理热点数据的过期机制。
  3. 缓存预热机制:预热数据到缓存中,提前缓存一些热点数据,让缓存失效前,提前把热点数据缓存到缓存中,从而避免缓存失效带来的瞬时数据库压力。

缓存雪崩

✅ 现象:大量缓存同时失效(例如Redis宕机),导致大量请求落到数据库上。

🔧 解决方案:

  1. 随机过期时间(基础过期时间 + 随机偏移值)
  2. 热点数据永不过期 + 后台更新
  3. 集群部署保证高可用
  4. 二级缓存策略(本地缓存 + Redis)