缓存注意事项
缓存穿透
✅ 现象:请求访问 不存在 的数据(不在缓存中,也不在数据库中),绕过缓存直接冲击数据库
🔧 解决方案:
- 参数校验 & 用户鉴权。
- 缓存空值:即时是数据库中不存在的数据,也可以在缓存中设置一个短时空值(例如expire:30s),以防止恶意攻击。
缓存击穿
✅ 现象:热点 Key 突然失效,导致大量请求落到到数据库上。 🔧 解决方案:
- 互斥锁(Redis setnx):互斥锁,保证只有一个线程能够获取到锁,其他线程等待。或限制QPS。
- 逻辑过期时间,逻辑处理热点数据的过期机制。
- 缓存预热机制:预热数据到缓存中,提前缓存一些热点数据,让缓存失效前,提前把热点数据缓存到缓存中,从而避免缓存失效带来的瞬时数据库压力。
缓存雪崩
✅ 现象:大量缓存同时失效(例如Redis宕机),导致大量请求落到数据库上。
🔧 解决方案:
- 随机过期时间(基础过期时间 + 随机偏移值)
- 热点数据永不过期 + 后台更新
- 集群部署保证高可用
- 二级缓存策略(本地缓存 + Redis)