ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-08-20 14:00:35  阅读:153  来源: 互联网

标签:缓存 数据库 击穿 雪崩 key 失效


个人理解:

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

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

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


缓存雪崩

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

造成原因

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

解决方案

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

缓存穿透

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

造成原因

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

解决方案

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

缓存击穿

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

造成原因

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

解决方案

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

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

标签:缓存,数据库,击穿,雪崩,key,失效
来源: https://www.cnblogs.com/bogiang/p/15166174.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有