阅读 18 SEO

(面试高频)Redis-击穿、穿透和雪崩

关于击穿、穿透和雪崩你真的了解麽?
相信你看完了以下我的介绍,会有所了解...

击穿

通俗的说击穿:前提是对某一key发生了高并发至redis,恰巧那么一瞬间key消失(过期时间/LRU/LFU),此时key的消失造成并发访问DB。

先上图,一张图抵过1万句废话,呵呵;-)

击穿图解.png

击穿图解:由于redis是单线程的,即使高并发请求过来,那也得一个个处理,总有个先进来的请求。请求过程分为->1,get key ,发现key不存在;2,分布式锁setnx,对该key加锁;3-1,然后去查db,查到数据,set k v; 3-2, 于此同时其他请求到达后,同样是否可以setnx成功? false时,sleep xs, sleep结束后再get key;
上述看似完美,其实有个问题:如果第一个人在3-1阶段挂了呢?这样就进入无限循环了。
怎么解决呢?答: 给setnx 设置锁的过期时间。
上述又看似问题解决,其实又有别的问题来了,第一个人没挂,但是锁超时了。那么后面的请求跟第一个人一样了,就乱了。
怎么解决呢? 答:上多线程,一个去查db,一个监控是否设置值,没有则延长锁过期时间。

穿透

通俗的说穿透:从业务接收查询的,是系统根本不存在的数据,即redis中没有,db中也没有,这样请求就直接打到db

还是先上图;-)

穿透图解.png

穿透图解: 加上布隆过滤器。前面的章节已经介绍过布隆过滤器;-)

雪崩

通俗的说穿透:大量的key同事失效,间接造成大量的访问打到db
依然是先上图;-)

雪崩图解.png

雪崩图解: 分两种场景来解决雪崩,时点无关的数据,采用随机设置过期时间;时点有关的数据,强依赖击穿解决方案(也可业务层加判断做延时)
补充->>时点有效数据是啥意思? 答:0点前一种优惠力度,0点后另一种优惠力度

————————————————————
坐标帝都,白天上班族,晚上是知识的分享者
如果读完觉得有收获的话,欢迎点赞加关注

文章分类
后端
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 gxwowoo@163.com 举报,一经查实,本站将立刻删除。
相关推荐