00:00
各位同学大家好,接下来给大家介绍第四题,缓存击穿,那么老规矩它是什么?它呢有哪些危害?咱们呢,如何预防,如何处理,如何防止?那么最终我们用一个模拟淘宝聚划算的一个功能模块来给大家从头到尾讲清楚机窗的发生、预防和处理动作。首先,在学习缓存机穿之前,一定要先明确一个概念,缓存穿透、缓存机窗,截然不同的两个东西。一个是雷锋,一个是雷锋塔,一个是Java,一个是javascript的关系,没有太大的关系,两个是不同的现象,OK,好,那么接下来开工,首先缓存击穿是什么?半下简单而言,大量的请求同时查询一个K的时候,刚刚开始我们能击中这个目标,正常的使用。
01:07
可是在反问的过程当中,这个K正好失效了,哎,就这点寸劲,讲讲好,就这么一瞬间完了。大量的请求都打到数据库上面,那么简单的说,就是因为经常见到的。生产故障热点key突然失效,暴打了买Q1顿。OK,注意缓存击穿发生的特点是热点key突然失效,导致MYSQ被暴打,那么从我们从头讲到尾,我们都清楚,第一章的时候,小白篇我们就讲过,Red就是MYSQ的防弹衣,就是MYSQ的带刀护卫,他突然失效了,那么满色就是分分钟被打爆的,OK,甚至秒秒钟一下CPU就上来了,那么所以说我们要避免这样的一种情况。那么接下来穿透和击穿,咱们呢?要明白截然不同,好,回到我们的案例,那么弟兄们呢?
02:09
都要清楚啊,左边这个是叫什么穿透OK啥意思啊,它有个话的话,意思就是从头到尾,自始至终。没有,我们是不是说过一句话,正所谓是本来无一物,两库都没有,OK?过来查个red,没有,再过去查MYSQL穿透了,但是呢,对不起,现在我们是击穿,和它不一样的击穿,击穿的意思是什么呢?从头开始都是正常的,一开始啊,Red有,你可以把甚至把它理解为MYQ也有。
03:00
OK,好,但是突然出现我们高频访问的热点K失效,那么什么情况下会导致热点key失效呢?比如说一般啊,我们在设置一些K的时候。有两点。第一种。永不过期,第二种给某些key是设定自然而然带着自然过期时间的,那么如果刚好这个带着自然过期时间的热点T到那个点,就那点寸劲,它突然时间到了没了,那不用多说了,基本上是不是全部干到我们买CQ了,这是第一种情况,第二种情况就是我们在进行一些数据程序更新迭代时候需要。
04:03
老的key换上新的key,那么在这个delete动作的时候就出现青黄不接,老的没删干净,新的还没补上来,那么这个请求去找这个原来的K的时候突然失效了。所以导致。击穿,注意。穿透。和击穿两回事,尤其这个击穿是一开始是有的击击击先击中了,然后没有击中,打穿了,打到M色Q上面,OK,所以把这些概念咱们先整明白,那么明白。缓存击穿是什么?以后那么来看一下它的危害。一句话,会造成某一时刻数据库的请求量过大,压力剧增,那这是一个非常危险的啊,基本上就是要么没事,要么就是。
05:08
很夸张的,一次性的干到ICU去了。所以一般技术部门。需要知道热点T是哪些个啊,注意是热点T,不是所有T啊,你要做到心里有数,但凡这些是热点T,如果你怕到时候出事,一定要做防止缓存机窗的对应的re策略要有个兜底的方案,OK,好,那么同学们机穿二是什么和危害,咱们就先说到这。那明白了缓存机触是什么及其危害的话,那杨哥求解决方案,如何避免,如何预防,如何搞定?那接下来漏眼,首先故障现象叫缓存击穿导致原因是热点key,一个重要的数据key或者一小批次key突然失效,那么一下子如果没有做预防措施,会干到MYSQL把我们的系统打崩,所以一般我们在生产上实际项目工作当中。
06:10
希望你采用互斥更新、随机退避、差异失效时间等这些常见的主流手段来预防缓存击穿,一句话就是尽量避免热点key突然失效,好,那么问题的关键就回到了热点key突然失效,那么它为什么会失效呢?原因有多种,但是最主要的就两。第一个一般我们设置K,要么设置为永不过期,你永不过期的就不存在热点可失效,因为时间有问题,对不对?第二种不排除某些业务,比如说他呢,就是什么双11的业务,可能双11就是11,从11月1号到11月11号,也许就干这11天,甚至往后延个四天,就干15天,15天以后这些活动下线了,这些key给我拿出去,OK,那么这时候时间到了自然清除,但是呢,又被突然反问到了。
07:05
埋下隐患,第二种,我们在清洁清理数据的时候,一小批次这些K,假设它就是什么元旦促销,就是12月31号,1月1号,1月2号,就这三天活动,三天以后给迪利塔量,我们就存在三天,但是刚巧可能没有做限流,没有做预防,又突然被访问到了,那么这个时候就会打爆,所以我们呢,需要想一些兜底的方案和预防措施哦。那么第一种。差异失效时间。对于访问频繁的热点T,哎呀,干脆你就不要设置过期时间,我们这个T了不起,我现在前台页面上把它关了,他找不到入口,没人点,哪怕它失效了也不会影响后台,对吧?好,我呢。直接。要访问的时候也不让他设置过期时间,那么这个是一种方案,第二种互斥更新,采用双减加锁策略,那假设避免不了,确实因为delete的时候他要打过来呢,我们强调了,你这个最怕就是一突然开闸放水。
08:09
开闸放狗以后。一堆请求打爆买条,那么我们不要让他打爆嘛,那么这个弟兄们这段代码应该很熟悉了吧,双减加锁,OK,不再啰嗦,不再赘述他。不见得只能用在某一种场景,你只要是互斥更新这样的一种情况,就可以用这段代码,哎,既可以,就说白了,防止MYSQL被高频发打爆。那么既可以用在。击穿也可以用在穿透都可以,甚至用在其他案例,好,那么最终我们呢,要避免的就是热点key失效,那接下来呢,各位同学,我们来看一下我们这个生产案例。
我来说两句