缓存雪崩、缓存穿透、缓存击穿概念及解决方案

个人理解:

我们先了解一下雪崩、穿透、击穿这几个单词的含义呗。
雪崩:当山坡积雪内部的内聚力抗拒不了它所受到的重力拉引时,便向下滑动,引起大量雪体崩塌,人们把这种自然现象称作雪崩
穿透:以前玩CS、CF时有种外挂就是透视挂,可以直接无视墙看到你人在哪里。
击穿:字面意思咯,开枪击穿了墙,打到你人的身体上;那这个墙就被击穿了。

缓存雪崩:缓存大部分失效或缓存宕机,导致请求到达了数据库,数据库扛不住压力挂了,导致服务也跟着挂。因缓存引起的服务崩塌。
缓存穿透:数据不存在,请求绕过了缓存或者根本不在缓存里,直接去查询数据库。
缓存击穿:热点缓存失效,请求到了数据库。

区别:缓存雪崩是大部分的key失效,击穿是说热点key失效,穿透是key不存在缓存和数据库中


缓存雪崩

缓存大部分失效或缓存宕机,导致请求到达了数据库,数据库扛不住压力挂了,导致服务也跟着挂。因缓存引起的服务崩塌。

造成原因

大部分key失效、热点数据失效、缓存服务宕机不可用

解决方案

  • 宕机的话可以,建立集群,提高可用性
  • 数据失效的话,可以用多级缓存,本地进程作为一级缓存,redis作为二级缓存,不同级别的缓存设置的超时时间不同,即使某级缓存过期了,也有其他级别缓存兜底
  • 缓存过期时间设置随机数,不要让数据再同个时间段一起失效

缓存穿透

查询一个根本不存在的数据,缓存层、持久层都不会命中。

造成原因

攻击者,经常查询一些不会存在的数据, 比如查询商品id= -1

解决方案

  • 接口层做校验,id<0 返回错误
  • 使用布隆过滤器
  • 非法请求多次的ip进行拉黑

缓存击穿

热点缓存失效,请求到了数据库。

造成原因

  • 当前key是一个热点key(例如一个秒杀活动),并发量非常大。
  • 重建缓存不能在短时间完成,可能是一个复杂计算,例如复杂的SQL、多次IO、多个依赖等。

解决方案

  • 缓存过期时间设置永不过期

参考:https://blog.csdn.net/womenyiqilalala/article/details/105205532

posted @ 2021-08-20 13:53  bogiang  阅读(271)  评论(0编辑  收藏  举报