Redis缓存雪崩,穿透,击穿

前言

    Redis的缓存雪崩,穿透,击穿是在项目开发时应该注意的问题,相信大部分人都经常看到或听到这几个字眼,但是如果使用稍有不慎,可能会带来严重的问题,不光会给公司带来严重的经济利益问题,可能还会给自己的职业生涯带来一定的影响,所以本篇文章旨在说清楚三者的问题并提供相应的解决方案。

开始

        一.缓存雪崩                                                                      

        雪崩的时候,没有一片雪花是无辜的!同样,缓存雪崩的时候,没有一个请求是无辜的!

        缓存雪崩是指缓存中数据大批量到过期时间或者缓存数据库因为某些原因不能正常工作,而大量的请求全部落在数据库上,引起数据库压力过大甚至宕机,举个例子,某电商网站有一个抢购活动,活动时间为5个小时,从下午3点活动开始,7点活动结束,刚好在7点整的时候有大量的用户进行抢购,然而这时,Redis里面的缓存数据已经过期了,用户请求先到Redis里面请求数据,里面没有数据,所有请求都落到了MySQL里面了,由于请求量过于大,所以此时MySQL承受不了如此大的压力。

对比图

  解决方案:

    1.配置Redis高可用,采用主从哨兵模式,当redis因为某些原因不能正常工作时,切换到其他节点,保证了系统能够正常运作。、

    2.让过期时间不一致,如果让缓存时间在同一时间内全部失效,那么当请求过多的时候就会全部落在数据库里面,所以我们可以对数据设置不同的过期时间,这样不会因为数据大面积的过期。

    3.设置数据永不过期,为了降低风险,可以将数据设置为永不过期,当数据需要更新的时候相关人员可以直接在redis里修改,不过这样做需要用更多的存储空间。

    4.使用相应的限流和降级组件,如Hystrix,Sentinel等,当用户量过大或者缓存层发生故障时,这些组件将会很有用处。

二.缓存穿透             

   缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,最终导致数据库宕机,例如某个非法 分子或者竞争对手发起一个查询请求,查询id为1或者id很大的商品,我们知道id一般设置为自增,所以不存在id为-1,所以不论在缓存层还是存储层都无法查询到,如果发起的请求太多太频繁,结果可想而知。

   解决方案:

    1.严谨的校验逻辑,在接口处对参数进行严格的校验,如果不满足条件,直接返回。

if(id<=-1){   

    return"参数不合法";

}

    2.从缓存取不到的数据,在数据库中也没有取到,这时可以将key-value对写为key-null,缓存有效时间可以设置短点,设置太长会导致正常情况也没法使用,这样可以防止攻击用户反复用同一个id暴力攻击

setExpired(key,null,time);

三.缓存击穿    

    缓存击穿指大量的请求一直访问缓存中的一个热点key,突然这个key过期了,大量的请求全部落到了数据上,和雪崩很类似,但是和雪崩的区别是雪崩情况是缓存中的key大量过期,所有请求落到了数据库上,而击穿是在某个时间点上某个key突然过期。

 解决方案:

   1.将热点key设置永不过期,这样就不用担心因为key过期而引起大量请求落到数据库的情形,当热点key需要修改相关的数据时直接从缓存中修改。

   2.可以使用互斥锁,当缓存中的key过期时,去数据库中取出数据放到缓存中,使用了互斥锁,就避免所有请求一下全部落到了数据库中。

今天的文章就分享到这里,喜欢可以关注,我是小四,一个喜欢文学也喜欢技术的渣男

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,992评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,212评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,535评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,197评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,310评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,383评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,409评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,191评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,621评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,910评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,084评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,763评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,403评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,083评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,318评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,946评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,967评论 2 351