00:01
各位同学大家好,下面呢我们继续来学习red应用过程中遇到的问题以及解决,刚才呢我们说到了缓存穿透,那下面呢,我们再来描述下一个问题,叫做缓存击穿,那缓存击穿是什么问题呢?下面给各位同学我来详细解释一下。咱们在图上,我们现在再来画一下,这个叫缓存击穿,我在里边写下。然后什么叫缓存击穿呢?我解释一下啊,缓存击穿第一个它的现象呢,主要有以下现象,首先第一个现象就是我们在操作中啊,我的数据库的这个访问压力。它瞬时间就增大了啊,就是瞬时就。增加了,比如现在我本来好好的,突然我的压力马上就变大了,这是它的第一个特点,然后里边还有第二个特点,这个特点有同学可能会想,是不是因为我这个穿透造成的,但是它不是,它的第二条件是什么,我现在这个raise里边。
01:12
它并没有出现这个大量的key过期,因为大家知道re中的key是不能过期啊,当你过期之后是仿到了要反数据库,但是在D穿中,RA中的key并没有出现大量过期,另外里边第三个条件就是我现在啊,这个red还是一个正常的运行状态,它的压力并没有变大,还是平稳运行的,但是目前我的数据库已经崩溃了,所以这是我们看到的击穿的这个现象,这各位知道,主要现象就是数据库的访问压力顺势增加了,但是red中并没有出现什么问题,它里边有没有出现大量key过期的情况,但是现在数据库已经崩溃了。那这问题是怎么造成的呢?咱们做个排查,然后咱们看啊,它的问题呢,其实主要就是一个原因,什么原因呢?就是我现在啊,我read中它里边的某个key过期了,注意是某个K过期了,而这个key呢,正好当时啊又有大量的访问,而大量访问中都使用到了这个key,比如这个key呢,一直在访问,但是这个key现在已经过期了,所以它就会出现我们现在问题,这就叫做缓存击穿。
02:31
给各位再说一下啊,我们现在问题是什么呢?Re中的某个key过期了,而我大量仿中都用到这个K,因为这个K是不是就过期了,它一过期的话,那re中就没法实现命中,这压力肯定都给服务器,都去不断插数据库,最终造成数据库的压力那就变大了。这是里边我们提到的缓存击穿,某个key过期了,这个key又是一个热门访问的key,因为这种场景应该很常见,比如说我们在实际中某些词汇搜索频率很高,那这词汇它一直在访问,那这key过期了是不是就访不到了,最终会不断访问我们的数据库,这过程称为缓存击穿,大家把这知道。
03:17
那这问题出现之后呢,我们该怎么解决呢?给各位来说一下啊,我这里边提供了三种比较常见的解决方案。首先第一种方案,当你遇到这种热门访问keyu过期的时候呢,第一种方案怎么做?咱就可以像预先设置一些热门数据到re中,比如大家注意,比如现在呢,突然这个网上出了一个热点,比如说某某明星做了什么事情,那这热点肯定是一个热门词汇,那我现在可以把热门词汇在我read中先提前加入一些相关数据,当我访问的时候,直接访问ready词,并且把数据的K时长增加,比如说之前可能是十分钟,现在我们增加,比如说一天两天或者更长时间,这就是里边的第一种方案,预先设置热门数据,然后加大这些热门数据T的一个时长,这是第一个方案。然后第二方案怎么样呢?叫做实时调整,比如我们现在实时监控我这re里边的状态变化,当我看到哪些热门数据频繁访问,那我就现场去调整这个key。
04:26
过期时间比先生,咱们今天看到我这key频繁访问这个数据,频繁有人搜索到,那我把它这个时长或者说过期时间就给它增加就可以了,这是第二种方案,然后里边还有第三种方案,这种方案叫什么?就是使用锁的这种方案。其实我们用锁呢,这个问题肯定都可以解决,就是锁嘛,一个月来他操作,他等,然后他的碗他在等,按照这个顺序最终执行,他肯定能解决问题,而锁怎么做呢?大家看一下里面这张图,就就是这个描述,当我们在ready中查数据,如果反应结构等于空,那怎么做,咱就设置锁,设置锁的话,这里边是它失败,那我们等一会儿再查询,知道成功,我们再释放锁,就是里边用锁的机制,做到锁的好处就是什么呢?绝对能避免这个问题,但是缺点也很明确,因为它效率肯定会很低,只要用到锁肯定会降低效率,所以这个啊是我们提到的关于这个缓存击穿的问题,包括它的解决方案,各位把这知道啊,比如说现在呢,咱们讲了两个问题,一个叫缓存穿透,一个叫缓存击穿,这两个是不一样的,各位要把它们区分出来。
我来说两句