栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

浅谈Redis的三个场景(雪崩、击穿、穿透)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

浅谈Redis的三个场景(雪崩、击穿、穿透)

        前提知识:

                redis的作用——缓存作用(个人认为就是将一些常用数据放到内存上,用的时候直接拿,这样用户在进行请求的时候就直接从redis里面拿,而不去数据库中拿,这样就减轻了数据库的压力)。

                下面介绍的三个场景就是在特定的情况下redis没有发挥到我们预期的情况。

         1.缓存雪崩现象

               一般redis的数据都是有过期时间。当大量的数据在同一时间失效,此时大量的用户请求就会直接请求我们的数据库,此时就有可能将我们的数据库打崩。(这个场景和下面要说明的两个场景的区别在于这个是对不同的数据,下面两个场景是对一条数据)

                本来我们的预期是:

                

                但是由于redis里面的大量的值在同一时间过期(在这一瞬间redis就相当于没有),这些请求redis中没有,就去了mysql中请求数据(此时还没有同步到redis中)就出现了这种情况:

                

                在上图的情况下,就有可能会打崩我们的数据库。

         解决

        我们的期望是,redis帮我们拦住请求,但是redis的数据如果没有过期时间,redis数据库就会存有大量的垃圾数据。存入redis的数据的过期值添加一些随机数,这样数据不会大量的在同一时间过期,即使有一部分数据过期了,访问了数据库,也不会出现问题,访问到数据库后又会将这个数据存入redis,这样就避免了缓存雪崩问题。

        2.缓存击穿

        缓存击穿现象,缓存中没有但数据库中有的数据(一般是缓存时间到期)

        一般针对redis中的热点数据(这里与雪崩区分是一条数据),比如:我们在双十一的时候,对一台电脑进行秒杀活动,到到秒杀时间的时候,redis中没有该数据(可能由于数据过期),此时用户对这一条数据进行的请求非常大,这些请求就会涌入数据库,也可能会打崩我们的数据库。

                正常情况下,用户访问热点数据

                

                这一条热点数据出现问题(过期),此时其他的redis数据是完好的。

                

                在这个热点数据出现问题的这一瞬间,这些请求就打到了数据库上,可能会打崩数据库。

      解决

        我们的期望是,redis帮我们拦住请求,但由于redis的缓存时间到期的那一瞬间,请求过大,请求到数据库中的量太大,所以解决这个问题的方法也就自然而然的出来了——将热点数据设置永不过期。

       3.缓存穿透

          缓存穿透现象,缓存中没有,数据库也没有的数据。

          这种是一种不合法的请求方式(攻击方式),比现在我们有一个买电脑的网站,现在出现了搜索手机的请求,在这种情况下我们的数据库和redis中自然都没有,这个请求就穿过了我们的redis,查询数据库,由于我们的数据库中也没有就无法同步到redis。但这种请求如果是故意想要破坏我们网站的一种攻击请求呢?一个黑客不断地发送搜索手机的请求,这样他的请求就打到了我们的数据库上,就可能会将我们的数据库打崩。

            正常情况下,用户请求redis。

                

              一个非法的请求。                

                

                 这样穿透了两层,由于数据库中没有该数据,也就无法同步到redis中,也就是说,这个我要手机的请求无论多少次都能打到我们数据库上,如果用这个请求进行攻击那么就可能会打崩我们的数据库。    

        解决

        我们的期望是,redis帮我们拦住请求,但是由于数据库和redis中都没有这样的数据,但请求打到了数据库中。针对这种情况,我们可以使用一个非常数据结构——布隆过滤器(一个由01字符组成的数组,存储了所有的数据是否存在的信息)有关布隆过滤器,我会在以后的文章中进行详细介绍。

                

 

      总结

        redis的三个场景雪崩、击穿和穿透,雪崩是针对大量数据,击穿是指针对热点数据,穿透是指针对redis和数据库中都没有的数据。

        无名小辈,才疏学浅,希望这篇文章能够给您带来帮助,希望各位前辈大牛多多指点和批评。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/346229.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号