您好!欢迎来到爱源码

爱源码

热门搜索: 抖音快手短视频下载   

看完这篇文章就够了!什么是Redis缓存雪崩、缓存穿透、缓存击穿?全部在五分钟内完成。 {php源码}

  • 时间:2022-07-20 03:05 编辑: 来源: 阅读:286
  • 扫一扫,手机访问
摘要:看完这篇文章就够了!什么是Redis缓存雪崩、缓存穿透、缓存击穿?全部在五分钟内完成。 {php源码}
今天在序言中引用的主要是这个redis,什么是缓存雪崩,渗透,击穿? 这三个技术问题是我们平时开发工作和面试过程中必不可少的知识点。由于很少有互联网系统不需要使用缓存,所以如果只使用缓存,我们需要掌握这三个技术问题。 基本上不管哪个兄弟去大厂面试都会被问到这些问题,所以作为一个互联网开发程序员,每个人都需要了解这些技术问题。 这些问题的解决方案通常包括Bloom filter和分布式锁。 Bloom filter是1970年的技术,已经有50年了。之所以能应用至今,说明这项技术相当优秀,也是Google搜索引擎采用的技术,很受欢迎。 这里我就不说这个Bloom filter了,后面会有一篇文章专门介绍这个Bloom filter和分布式锁。 接下来正式说说redis的缓存雪崩,渗透,崩溃。 雪崩。让我们首先来看看这个正常的缓存过程。如下图所示:image.png可以看到,首先这个客户访问这个东方,然后这个东方访问这个Redis。如果Redis有这个访问数据,会直接返回缓存获得的数据;如果Redis缓存找不到数据,就会去MySql数据库查询。如果查询结果,它会将从MySql中找到的数据同步到Redis缓存中,同时返回查询结果。 这是一个简单而正常的缓存过程。 然后,基于这个正常的缓存过程,我们来看看什么是雪崩式的缓存。 首先我举个例子,就是在双十一的时候,在某地买了东西,进入它的首页。因为是双十一,首页的访问量非常大,所以首页的很多数据都缓存在redis里。 假设主页数据存储在redis的100个键中,那么设置的缓存过期时间是两个小时。当双十一期间购物持续超过两个小时,这个首页数据的redis缓存会在此刻全部过期,导致所有请求都命中这个MySql数据库。这时数据库的访问压力增大,导致这个MySql数据库没有及时响应就挂掉了,使得某东的主页无法继续对外提供服务。后来东哥特别不高兴,负责了这个技术。 那么,我们通过这个例子来看下图:也就是说,当一个客户访问某个east时,此时redis中的大量key无效,导致这个east直接访问数据库,向数据库发送大量请求。这种现象就是缓存雪崩。 简单来说,redis缓存同时大量失效,就像这次雪崩一样。 那么,对于缓存雪崩,您有多少种解决方案?下面说一下:设置这个缓存的过期时间,这样就不会有大量的密钥同时过期,也就是在设置这个缓存的时候,可以分散密钥的过期时间。 我们一般都是集群部署redis,所以可以把这些热点的密钥放在不同的节点上,让这些热点的密钥均匀分布在不同的redis节点上。 还有一种更暴力的方法,不设置这个缓存的过期时间,这样密钥永远不会过期。 缓存渗透接下来,我们来详细了解一下。什么是缓存渗透? 我们再举一个例子:假设一个老哥开发了一个网站,然后这个网站很红,有一天突然被一个黑客疯狂攻击。他的攻击手段是采用缓存穿透的原理。 众所周知,一般情况下,数据库的主键是从0开始递增的,不存在负数。所以这个黑客利用了这一点,他不断发送ID小于零的参数请求。 一开始这位兄弟把网站的所有数据都放在redis缓存里,但是黑客用ID小于零的号来请求。redis缓存中没有ID小于零的数据,所以redis找不到这个结果。一旦redis找不到结果,就会在数据库中进行检查,所以所有的请求都会命中数据库,而且会一直命中数据库。因为redis缓存根本无法屏蔽这样的数据。 Redis缓存直接被这个数据穿透,直接穿透到数据库中。 我们再来看下图:首先,这个恶意客户访问某个地方,用id=-1的数据请求它。然后在redis缓存中找不到id=-1的数据,就在数据库中查询,找不到这一块数据,就只能用空数据返回前台。 这种恶意客户端(黑客)利用脚本不断发送这些数据请求,直接穿透redis击中这个数据库,称为缓存穿透。 简单来说,缓存穿透就是缓存和数据库中没有这些数据。一般这种情况正常客户是不会访问的。 那么,缓存穿透的处理方案有以下几点:如果请求穿透redis,直接到数据库,那么数据库找到什么结果就写回redis缓存,这样下次用同样的参数发送请求,就直接被redis缓存拦截,不会回调到数据库。 检查所请求参数的有效性。 直接简单粗暴的黑这个IP的方式。 最后使用Bloom filter,这是一个非常好的方法。 缓存崩溃先说最后一个问题,就是缓存崩溃。 我们以双十一为例:双十一那天,东哥说要举办一个大型活动,说要拍卖他20年前用过的电脑,然后有海量的人对这台电脑感兴趣,于是东哥决定在双十一当天九点拍卖这台电脑,然后东的一个开发者把电脑数据放在redis缓存里,对应redis缓存里的一个键。 拍卖的时候,大家的热情都很高,拍卖持续了近三个小时。网上拍卖还没有结束,但是这台电脑对应的redis缓存密钥的到期时间是三个半小时。 大家拍卖三个半小时的时候,这台电脑的缓存键突然失效,导致大量的拍卖请求在redis中找不到数据,以至于这些大量的请求会被直接打到数据库上。这时候数据库瞬时压力增大,导致响应不及时,挂掉。 这时候,东哥看到自己的电脑没被拍卖,有点生气,就把程序员送到了非洲。 我们再来看下图:某客户逛某店,然后去redis请求拍卖秒杀商品。当缓存没有失效时,redis可以返回这个缓存键的结果,但是当缓存键失效时,这个请求就会突破这个redis,直接命中数据库。 这里注意的是,这里是一个热点的键,大量的客户不断的请求访问这个热点的键。当这个热点的键突然失效时,所有的请求都被键入数据库,这个过程叫做缓存崩溃。 记住它是突破一个非常热点的关键。 那么这个缓存崩溃的解决方案就是:让这个热键不要过期,也就是不要设置过期时间(不推荐)。 使用分布式锁,如果是单个应用程序,使用互斥锁(这将在分布式锁的下一篇文章中讨论)。 摘要缓存雪崩:指大量缓存键同时失效。 缓存穿透:是指redis中没有被请求的数据,直接通过redis传递到数据库。 缓存崩溃:指一个非常热的键。大量客户请求此缓存热键。当这个缓存键突然变得无效时,这些请求将会命中数据库。 写到最后,如果看完还有什么不明白的,可以在下面留言讨论。感谢您的观看。 记得关注我,觉得文章对你有帮助就给我赞!作者:路由器没有路链接:https://juejin.cn/post/6917249612457705480


  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【域名/主机/服务器|】qq邮箱提醒在哪里打开(2024-06-04 18:58)
【技术支持|常见问题】1556原创ng8文章搜索页面不齐(2024-05-01 14:43)
【技术支持|常见问题】1502企业站群-多域名跳转-多模板切换(2024-04-09 12:19)
【技术支持|常见问题】1126完美滑屏版视频只能显示10个(2024-03-29 13:37)
【技术支持|常见问题】响应式自适应代码(2024-03-24 14:23)
【技术支持|常见问题】1126完美滑屏版百度未授权使用地图api怎么办(2024-03-15 07:21)
【技术支持|常见问题】如何集成阿里通信短信接口(2024-02-19 21:48)
【技术支持|常见问题】算命网微信支付宝产品名称年份在哪修改?风水姻缘合婚配对_公司起名占卜八字算命算财运查吉凶源码(2024-01-07 12:27)
【域名/主机/服务器|】帝国CMS安装(2023-08-20 11:31)
【技术支持|常见问题】通过HTTPs测试Mozilla DNS {免费源码}(2022-11-04 10:37)

联系我们
Q Q:375457086
Q Q:526665408
电话:0755-84666665
微信:15999668636
联系客服
企业客服1 企业客服2 联系客服
86-755-84666665
手机版
手机版
扫一扫进手机版
返回顶部