参考文章

小林coding缓存篇(写的非常好,推荐阅读)

缓存雪崩

什么是缓存雪崩

缓存雪崩:大量缓存数据同时过期,或 Redis 故障宕机,导致大量请求全部去访问数据库,数据库压力过大,严重的会造成数据库宕机,从而产生一系列连锁反应,造成系统崩溃。

解决方法

针对大量数据同时过期:

  • 均匀设置缓存过期时间
  • 缓存加锁
  • 后台更新缓存(例如缓存预热)

针对 Redis 故障宕机:

  • 服务熔断或请求限流
  • 构建 Redis 缓存高可靠集群

缓存击穿

什么是缓存击穿

缓存击穿和雪崩类似,可以认为击穿属于雪崩的一类。

缓存击穿:缓存中的某个热点数据过期,如果此时大量请求访问热点数据,会直接访问数据库,数据库容易被高并发的请求冲垮。

解决方法

  • 缓存加锁
  • 热点数据不设置过期时间,后台更新缓存

缓存穿透

什么是缓存穿透

缓存穿透:要访问的数据,即不在缓存中,也不在数据库中,此时大量请求导致数据库压力过大。

解决方法

  • 限制非法请求
  • 针对查询数据,在缓存中设置空值或默认值