首页 / 缓存 / 聊聊什么是缓存雪崩和缓存穿透
聊聊什么是缓存雪崩和缓存穿透
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了聊聊什么是缓存雪崩和缓存穿透,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2347字,纯文字阅读大概需要4分钟。
内容图文
![聊聊什么是缓存雪崩和缓存穿透](/upload/InfoBanner/zyjiaocheng/1014/718c363372774fce8f150442ff1a4746.jpg)
缓存雪崩
假如一个系统,它在高峰期有每秒7000个请求,这时我们使用缓存抗住了这么高的请求。但如果在某个时间点缓存大量失效,或者缓存服务器挂掉了,那么这些请求就会直接作用在普通数据库中(如MySQL)。这么高的请求量,MySQL肯定抗不住,进而挂掉,数据库一挂,也会导致系统挂掉。
![聊聊什么是缓存雪崩和缓存穿透 - 文章图片](/upload/getfiles/0001/2021/5/18/20210518044519012.jpg)
我们总结缓存雪崩触发的条件:
“”
- 高并发情况下
- 缓存服务器挂了
- 大量缓存集中失效
导致的后果就是:系统崩溃。
解决思路,对数据库增加限流排队访问,假设我们的数据库最多能抗住每秒2000的请求,那当我们请求数据库时,每秒的请求就需要控制在2000内,其余的请求就需要排队。同时我们要保证缓存服务器的高可用,就需要使用集群。另外我们也需要随机设置缓存key的失效时间,防止key在同一时间失效。
雪崩解决关于限流操作,可以使用Spring Cloud相关的限流插件,这里我们使用Semaphore信号量模拟下限流操作。
![聊聊什么是缓存雪崩和缓存穿透 - 文章图片](/upload/getfiles/0001/2021/5/18/20210518044519437.jpg)
在这里我们限定同时最多可以有5个请求访问,当我们有9个请求进来时,只有5个请求获取到可以访问的令牌,其余的4个请求在外面等待。当前面的访问结束时,会释放令牌,后面的4个请求就会去抢占这些令牌,这样反复执行。
这里我们就起到了限流的操作。
缓存穿透
假设存在一个key永远不会在缓存中存在,当***通过这个key去***系统,比如每秒发起了7000次***,那么无论如何都不会走缓存,***请求直接打在了数据库上,数据库肯定扛不住。导致了数据库崩溃,同时,系统也会崩溃。
![聊聊什么是缓存雪崩和缓存穿透 - 文章图片](/upload/getfiles/0001/2021/5/18/20210518044519869.jpg)
我们的解决思路是:查询之前先判断目标数据是否存在,不存在的直接忽略。将流量拦截于缓存和数据库之前。
穿透解决如上图,增加过滤器,在系统启动之前,我们需要将热点数据统一加载进入缓存中,当对热点数据访问时,会通过过滤器判断一一次,发现请求在缓存中不存在,就直接返回,不会经过数据库。
过滤器我们可以使用布隆过滤器,布隆过滤器的示例代码如下:
![聊聊什么是缓存雪崩和缓存穿透 - 文章图片](/upload/getfiles/0001/2021/5/18/20210518044520290.jpg)
布隆过滤器主要就是将key通过hash算法计算出来的值分散到bitmap中,在bitmap中是以0和1存在的。
![聊聊什么是缓存雪崩和缓存穿透 - 文章图片](/upload/getfiles/0001/2021/5/18/20210518044520676.jpg)
然而上面的算法存在缺陷:
“布隆过滤器并不能精准过滤。(布隆过滤器判定不存在,100%不存在,判断为存在,则可能不存在的。)理论上Hash计算值是有碰撞的(不同的内容hash计算出同样的值),导致不存在的元素可能 会被判断为存在
”
当然,布隆过滤器并非需要拦截所有的请求,只需要将缓存击穿控制在一定的量即可。
关于缓存穿透我们还可以采用以下方案:
“缓存取不到的数据,在数据库中也没有取到,这时也可以将key-value对写为key-null,缓存有效时间可以设置短点,如30秒(设置太长会导致正常情况也没法使用)。这样可以防止***用户反复用同一个id暴力***。
”
不过上面的方案有个缺陷:***可能同时拿多个不存在的key短时间访问,一样也会访问数据库,所以实际中需要按场景进行优化改造。
缓存雪崩和缓存穿透一般会在高并发形况下遇到,也是互联网大厂高频面试内容,掌握这些知识,相信你又进入了一个新天地。
内容总结
以上是互联网集市为您收集整理的聊聊什么是缓存雪崩和缓存穿透全部内容,希望文章能够帮你解决聊聊什么是缓存雪崩和缓存穿透所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。