Redis穿透、雪崩、击穿与生产环境中的解决办法

Redis穿透、雪崩、击穿

redis 经典八股文,以及生产中的应对方式。

一、缓存穿透。

redis缓存和数据库中都没有相关数据的情况下,由于redis中没有相关的数据,无法拦截,请求直接穿透到数据库,导致数据库压力过大而宕机。高并发下缓存失效的问题。指查一个不存在的数据,由于缓存无法命中,但是数据库中也没有,导致每次查询不存在的数据都需要使用存储层查询,失去了意义。

解决方案
1,运维人员可以拉黑恶意IP
2,对不存在的数据也缓存到Redis里,设置 value为null,并且设置为短期失效
3,参数处理,在field域中对相关参数进行校验,不符合校验的请求都进行拦截
4,使用布隆过滤器,不存在的key,会被布隆过滤器过滤,从而降低对数据库的压力

推荐: 目前针对于缓存穿透问题,一般在使用中,会对在 Redis和数据库中都查不到的key,缓存value为EMPTY DATA INITIALIZED这个特殊值,当再次查询这个key的时候,直接从Redis里获取这个特殊值,就不会将大量恶意请求发往数据库。

二、缓存雪崩:大面积key在同一时间失效

设置缓存key采用了相同的过期时间,导致在某一个时刻key同时失效,请求全部转发到DB,DB瞬时压力过重,导致雪崩。

解决方案:
1,设置key永不过期
2,原有的失效时间增加一个随机值,比如1-5分钟。
3,使用redis集群部署,将热点数据均匀的分布在不同的redis节点
4,在缓存失效期通过定时任务,对即将失效的大量缓存进行更新

推荐: 目前针对于缓存雪崩问题,可以通过部署高可用的Redis集群N1、N2,将热点数据切片之后均匀存放在不同的Redis节点上,如果单个节点宕机,可以从其他节点上获取相关数据,同时加入二级缓存,如果在当前线程中获取不到数据,再查询当前 Redis集群里的数据,可以避免因单个节点宕机而引发的缓存雪崩。

三、缓存击穿

redis击穿是当某个热点key,在不停的扛着高并发的请求时,这个热点key在失效的一瞬间,持续高并发的访问会击穿缓存直接落到数据库,导致数据库压力骤升而宕机。(如果这些key在大量请求同时进来的时候失效,大量请求落到DB。)

解决方案
1,设置热点数据“永不过期
2,加上互斥锁。Redis击穿是多个线程同时去查询数据库的同一条数据,那么可以在第一个查询数据的请求上使用一个互斥锁来锁住它,让其他的线程走到这一步就等待,等第一个线程查询到了数据,然后将数据放到Redis里缓存起来。后面的线程进来发现已经有缓存了,就直接从缓存取。

推荐: 目前在我们的系统里开发了一套基于注解的缓存方案。利用Spring框架的AOP切面技术,实现Redis缓存。在高并发热点key情况下使用@CacheProperty注解,此注解使用Redis setnx加互斥锁的方法,执行第一条线程的查询请求,让其他线程进入等待状态,待第一个线程查完数据之后更新到Redis,其他线程可以直接查Redis,从而避免大量请求发往数据库。

总结: redis在开发中的使用的频率越来越高,也会导致相关的问题。在此,对于redis使用常见的三大问题进行了总结,并给出了一系列解决办法,并给出了比较推荐的解决方案。

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