缓存失效问题

本文通过工厂故事,形象地介绍了缓存穿透、雪崩和击穿三种常见缓存问题,以及相应的解决策略。缓存穿透是查询不存在的数据导致数据库压力过大,解决方案是缓存空结果并设置短过期时间;缓存雪崩是大量缓存在同一时间失效,引发DB压力,解决方法是设置随机过期时间;缓存击穿是热点数据在过期瞬间引发大量请求,解决方案是使用锁机制确保并发安全。
摘要由CSDN通过智能技术生成

标题

1、缓存穿透

2、缓存雪崩

3、缓存击穿

故事

时间:任何时候

地点:工厂

人物:老板DB、工人Cache、社会人social(流氓、无业游民)

背景交代:db老板开了数据工厂,工人们每天工作就是帮老板搬砖给社会人看看,工资贼高待遇贼好,社会人羡慕工人同时砖头又很好”看“,所以每天都会去工厂看看,看看砖啊什么的。。。

1.缓存穿透

  • 是指查询一个一定不存在的数据,由于缓存是不命中,将去查询数据库,但是数
    据库也无此记录,我们没有将这次查询的null 写入缓存,这将导致这个不存在的数据每次
    请求都要到存储层去查询,失去了缓存的意义。

  • 在流量大时,可能DB 就挂掉了,要是有人利用不存在的key 频繁攻击我们的应用,这就是
    漏洞。

  • 问题:

    缓存和数据库都没有该数据,结果为null

  • 解决:
    缓存空结果、并且设置短的过期时间。

故事:
有一天,一个流氓来到工厂,说:“我要一个五彩斑斓的黑砖头”,其实他就是在捣乱的,工人们(key)人手上都没有这种“五彩斑斓的黑砖头”,只能去找DB老板,老板一下子就知道这个人是流氓来捣乱的,心想:“赶走一个流氓还会来下一个,这样也不是办法,要怎么解决呢”,过了一会,DB老板叫来一些工人,指着旁边的空地说:”把这些‘五彩斑斓的黑砖头’、‘五颜六色的白砖头’、‘姹紫嫣红的绿砖头’…搬出去给流氓看看要哪种“,工人们一头雾水,都怀疑DB老板是不是疯了,纷纷思考,过来一会,工人直呼”DB老板高明“。于是,工人们就拿着这些”皇帝的新砖头“去给流氓”观赏“。

​ 从此,工厂厂史记录着:对付无理要求,我们可以无中生有

2、缓存雪崩

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

  • 解决:
    原有的失效时间基础上增加一个随机值,比如1-5 分钟随机,这样每一个缓存的过期时间的
    重复率就会降低,就很难引发集体失效的事件。

故事:

​ 工人们工作很辛苦,到了月末的时候,都纷纷来DB面前拿工资,而且是那种拿不到工资(续约)不干活(搬砖)的那种,此时,DB老板一早醒来,发现自己们开口站着许多工人,等着开粮,顿时阳光明媚转乌云,DB老板忙了很久,累的半死半活,差点小命被夺走。晚上,DB老板躺在床上,想:”不行,这么累的活,我不能每个月都经历一次“。

​ 第二天,老板就发了新的规定,工人除了基本工资外,每个月还有额外的红包,但是必须红包小的先来拿,大得隔天拿,再大的以此类推…后来,DB老板每天都会发一会工资而不会太累。

​ 从此,工厂厂史记录着:工作应该每天都做,不要堆积到某个时刻, 不然奔溃就在一瞬间,不会总出现“一支笔,一个人,一个晚上,一个奇迹”的时候。

3、缓存击穿

  • 对于一些设置了过期时间的key,如果这些key 可能会在某些时间点被超高并发地访问,
    是一种非常“热点”的数据。

  • 这个时候,需要考虑一个问题:如果这个key 在大量请求同时进来前正好失效,那么所
    有对这个key 的数据查询都落到db,我们称为缓存击穿。

  • 问题

    缓存没有,数据库有,且是热点

  • 解决:
    加锁,对于第一个拿到锁的,顺便把缓存写了,后来的去访问缓存

故事:

​ 有一天,一个工人到了领工资(时间续约)的时候,但该工人长得漂亮,算是明星,飘了,他觉得工资不算事,就不管合同,一只浪。等到夜晚降临,巨量社会人们不约而同都来看他,但发现看不到他(缓存里没有他),一些人(流氓)觉得可以取而代之,疯狂挤到DB老板那里索要合约当工人领高工资,DB老板发现不对劲,不做点什么估计会被冲掉,赶紧把门锁起来,并丢出一把钥匙,让社会人去抢,抢到的自然就可以和老板见面签合同,搬砖。后面的人就直接去找这个第一个人就行了。

​ 从此,工厂厂史记录着:保护好自己,让别人抢去。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值