【分布式】 常见缓存问题

缓存穿透

指使用不存在的 key 进行大量的高并发查询,导致缓存无法命中,每次的请求都穿透到后端数据库系统进行查询,使数据库压力增大直到被压死。处理方法有:

  • 将空值缓存
  • 检查 key 的合法性
  • 对服务设计限流和熔断

缓存并发

当一个缓存 key 过期时,因为访问这个缓存 key 的请求量比较大,多个请求同时发现缓存过期,因此多个请求会同时访问数据库来查询最新数据,并写回缓存。处理方法有:

  • 分布式锁,保证对于每个 key 同时只有一个线程去查询后端服务
  • 本地锁,同分布式锁,但只保证一个节点上不会有多个线程在更新
  • 软过期,对缓存中的数据设置失败时间,不是使用缓存服务提供的时间,而是业务层在数据中存储过期时间,由业务程序判断是否过期并更新,程序发现数据过期时再通过一定的策略保证只有一个线程更新缓存

缓存雪崩

服务器重启或者大量缓存集中在某一个时间段内失效。处理方法有:

  • 对不同的数据使用不同的失效时间