1. 缓存穿透
指使用不存在的 key 进行大量的高并发查询,导致缓存无法命中,每次的请求都穿透到后端数据库系统进行查询,使数据库压力增大直到被压死。
处理方法有
- 将空值缓存
- 检查 key 的合法性
- 对服务设计限流和熔断
2. 缓存并发
当一个缓存 key 过期时,因为访问这个缓存 key 的请求量比较大, 多个请求同时发现缓存过期,因此多个请求会同时访问数据库来查询最新数据,并写回缓存
处理方法
- 分布式锁,保证对于每个 key 同时只有一个线程去查询后端服务
- 本地锁,同分布式锁,但只保证一个节点上不会有多个线程在更新
- 软过期,对缓存中的数据设置失败时间,不是使用缓存服务提供的时间,而是业务层在数据中存储过期时间,由业务程序判断是否过期并更新,程序发现数据过期时再通过一定的策略保证只有一个线程更新缓存
3. 缓存雪崩
服务器重启或者大量缓存集中在某一个时间段内失效
处理方法
- 对不同的数据使用不同的失效时间