美文网首页redis分布式服务Java进阶之路
(面试高频)Redis-击穿、穿透和雪崩

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

作者: zzj0990 | 来源:发表于2021-01-28 19:09 被阅读0次

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

    击穿

    通俗的说击穿:前提是对某一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点后另一种优惠力度

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

    相关文章

      网友评论

        本文标题:(面试高频)Redis-击穿、穿透和雪崩

        本文链接:https://www.haomeiwen.com/subject/xkdxtltx.html