缓存雪崩
大量缓存数据在同一时间过期,或者 Redis 宕机时,大量 Redis 请求无法处理,导致直接访问数据库,从而引起一系列连锁反应。这就是「缓存雪崩」
解决方案
- 均匀设置过期时间,例如在同时设置大量 key 过期时间时,添加随机数
- 加锁,保证同一时间只有一个请求来构建缓存
- 后台更新缓存,让缓存持续有效
- 服务熔断或限流
缓存击穿
某个热点数据过期,大量请求访问热点数据时无法从缓存读取,导致直接访问数据库,称为「缓存击穿」
解决方案
- 加锁,保证只有一个请求来构建缓存
- 后台更新缓存,让缓存持续有效
缓存击穿
当一个数据缓存中和数据库中都不存在时,每次请求都需要先请求缓存,在请求数据库,并且由于数据不存在导致无法构建缓存,称为「缓存穿透」
解决方案
- 业务侧限制非法请求
- 缓存空值或默认值
- bloom filter