00:01
各位同学大家好,下面呢给大家来说一下re,中等血崩问题,那什么叫血崩问题呢?给各位还是做一个分析,咱们现在把这张图给大家画过来,然后我来解释一下关于学问问题。雪崩问题是什么呢?里边有这么一个现象,首先第一个就是在这个过程中呢,我们这个数据库。它的这个压力。变大了,而数据库压力一变大,大家会知道,那我这个时候呢,我的应用程序它的反应时间是会变慢的,比如数据库压力变大,想变慢了,你的应用访问肯定会变慢,从而造成你red里边也会有大量的访问等待,最终造成你的数据库崩溃了,应用崩溃了,Red也崩溃了。就算你把这些重启之后,它的效果也并不明显,所以这个就是雪崩一个特点,最终数据库压力变大,然后造成服务器它最终就崩溃了。
01:02
这是我们提到的啊,那这个问题呢,它是怎么来造成的这个问题呢?给各位来解释一下啊,就是这个问题造成的,跟我们刚才说那个击穿也好,包括里边的穿透也好是不一样的,那它是什么问题呢?我想这位置。我们说的re,雪崩什么意思,就是在这个极少的这个时间段之内,这里边呢,我们出现了大量的K的这个集中的过期的这么一个情况,造成你这个血温问题,比如现在我们在这个几分钟以内出现了大量key都过期了,那如果key过期的话,你再进行访问,缓存数据是访问到了,那它访问哪里是访问数据库了,你缓存数据访问到命用率降低,那压力肯定都给服务器,最终造成服务器的压力过大,造成你这里边最终就出现了服务器崩溃情况,这就是叫做血用问题。
02:00
在极少时间段内,我们查询大量key集中过期情况,这时候会出现叫做雪崩问题,就刚才我们说另外一种情况是某个热门可过期,而这个是大量key集中过期,这个叫雪崩,而雪崩肯定是一个很严重问题,那这个问题怎么解决呢?我们来看一下,我这里边写了这么几种比较常见的方案,首先我们看第一个方案叫做构建多级缓存架构,什么意思呢?比如咱们缓存啊,Redddi,那比如现在我加多级,我上面加一层N,这再加上其缓存,比如说EK等等,那这个时候如果说red不能处理,那我用1K处理,它不能处理,用这咱用多几度支撑,我这个不能做,用这个来做,这个不能做他来做,最终保证咱这程序或者我们的服务能够正常提供出去,这是里边的第一种方案,构建多级缓存架构。
03:00
但是这种方案大家要看到,对于我们的程序要求结构是过于复杂呀,但是也算是一种方案。另外第二种方案,这种方案应该是最有效的使用锁或者对列,比如说用锁的话,肯定可以保证没有这问题,那咱们这里边有一个很严重的缺陷,就是锁的机制,我操作别人只能等,我操作之后别再操作,他操作另外人也要等,所以这里边肯定能保证这问题不会出现,当然会造成我这效率极低,他不适合这种高并发情况,这是第二种情况,锁或者队列。另外还有第三个叫做设置过期标志,更新缓存,什么意思呢?比如我们现在啊,记录这个缓存数据是否过期,咱设置一个提前值,当缓存过期或者快过期的时候呢,我们就通知另外的线程,让他去更新实际的key的这个缓存,就是做一个数据更新,让他做访问,就是提前预知一下这个缓存是否过期。如果快。
04:01
再过期,那要给他做一个更新,这是一种方案,另外除了这个之外呢,还有第四种方案,因为这种方案咱还要需要做一些操作,但是第四种什么呢?让缓存失效时间分散开。什么叫分散开?比如说这个缓存啊,设置是都是五分钟过期,那咱可以把时间给它稍微调整一下,假如这个缓存这里边五分钟,那个五分钟零一秒,这个五分钟零两秒,让它的需要时间分散开,咱可以通过一个随机数来生成这个过期时间。这种方式也能解决我们说这个雪崩的这个问题。所以这就是关于啊雪崩问题的一个描述,包括它的解决方案啊,也就是咱们现在呢,说了三个典型问题,第一个就是缓存穿透,第二个叫缓存击穿,第三个就是缓存雪崩,各位把三个问题这个都要记住,包括它的解决方案给他要掌握,所以这个三个基本问题我们就说完了。
我来说两句