一分钟get:缓存穿透、缓存击穿、缓存雪崩 - 第304篇

一、缓存架构图

(1)在没有引入缓存的时候,我们请求的数据都是上数据库直接查询了。

(2)引入缓存之后,我们在获取数据时会先去缓存看看有没有缓存数据,有直接返回,没有上数据库进行查询,然后设置到缓存中,再进行返回。

(3)并不是所有的数据都要放到缓存中了:访问频率低的、读少写多的、一致性要求高的,这些就不要缓存了。

二、缓存穿透、击穿、雪崩

2.1 缓存穿透

师傅:纳尼,不是做缓存了,怎么还一直请求到数据库?

悟纤:你不会告诉我这就是缓存穿透吧?

师傅:是的,这就是缓存穿透造成的结果。
 

师傅:我们先来看下缓存穿透的定义吧,如下:

缓存穿透:在高并发下,查询一个不存在的值时,缓存不会被命中,导致大量请求直接落到数据库上,如活动系统里面查询一个不存在的活动。

师傅:这个名词取的多形象呐,缓存穿透。

师傅:你从何而来,要到到何处,从缓存过来,到数据库去。直接从缓存穿、透过去了,有点是绕开了缓存的意思。

悟纤:师傅这是一语道破天机呐。

师傅:简单说就是,

缓存穿透:请求未命中缓存,直接到数据库,这就是缓存穿透。比如:查询一个不存在的值的时候,如发起为id为“-1”的数据或id为特别大不存在的数据

师傅:明白了,一箭穿心,就是直接从缓存系统传过去,透到数据库,就是缓存穿透。

2.2 缓存击穿

师傅:理解了缓存击穿,接下来咱们来讲缓存击穿,注意这两个差别。

师傅:缓存穿透是查询一个不存在的数据,导致每次都打到数据库上了。缓存击穿,是确实在缓存有数据,我很用心的给你传了一个活动id = 666的。

悟纤:那怎么还会有问题呐?这不是很好嘛,每次请求都命中缓存了,使用率很高耶。

师傅:师傅,徒儿你还是太嫩了,还得在吃几年草。

悟纤:师傅,你又逗徒儿开心了,我不是你的小宝贝嘛。

师傅:(*^▽^*) , 你想想缓存是有失效时间的吧,那么如果缓存刚好到期了,而此时有一万个麒麟臂向你扑面而来,哦,不,是有大量请求过来,直接打到了数据库。看看定义吧:

缓存击穿:缓存中的一个Key(比如一个促销商品),在某个时间点过期的时候,恰好在这个时间点对这个Key有大量的并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮。

师傅:一般这样的key都是热点key,玩过秒杀,秒杀中的key就是热点key。

悟纤:师傅我懂了,就是热点key在高并发下刚好过期了,这些秒级请求直接打到数据库,如果数据库处理不过来,那就挂了。

师傅:嗯嗯,很对,所以缓存击穿简单理解就是:

缓存击穿:热点key,缓存过期,直击数据库。比如:秒杀活动的时候,大量用户进行抢购某个商品,而此时刚好key过期了,那么这些请求就直接命中到数据库了。

师傅:我们在来从词理解下这个意思。你看缓存击穿,何谓击穿,不就是有一个东西顶着,然后没顶住,就穿过去了嘛。请求击倒缓存,缓存碰巧开小差了下,就穿到数据库了。

2.3 缓存雪崩

师傅:我们先理解下雪崩的意思,大量雪体崩塌,这种自然想象就是雪崩。

悟纤:这个我也知道,那和我们的缓存有什么关系呢。

师傅:你看,大量雪对应缓存中的就是大量的key,崩塌就是缓存过期失效了,这就造成缓存雪崩了,直接请求到数据库了,同样的我们看下定义。

 

。。。。。。。。。。。。。。。。。

版权原因,完整文章,请参考如下:一分钟get:缓存穿透、缓存击穿、缓存雪崩 - 第304篇

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值