开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 18 天,点击查看活动详情”
前言
在redis之前的学习中,我们学习了缓存击穿、穿透和雪崩。但是这些单独在一篇文章里面讲可能会很清楚,但放在一起就是出现一些混乱,今天就是我来重点讲解一下这几种到底有什么不同。
共同点
首先来说说为什么会不好记忆,因为他们之间有相同的地方,就像dy上的美丽小姐姐一样,好看是好看但是都太相像了。缓存发生的问题基本上都是缓存不起作用了,大量的数据请求直接到达持久层,导致持久层的压力过大。既然都有相像的结果,那必然有不一样的发生原因。
区分的关键
这里直接切入正题,区分的关键就是缓存不行的原因。首先是缓存穿透,我们好好想想这不就是因为数据库没有这个数据,导致每一次请求都是发到持久层之中去,然后把缓存当初是防守的勒布朗一样的“穿透”过去了吗?然后是雪崩就是同一时间内大量key失效,导致太多的数据请求直接发到持久层去,从而持久层承受了太多的压力。最后一个则是缓存击穿,其实这个和缓存雪崩是比较相似的。为什么这么说呢?主要是因为缓存击穿是一个key(大量使用的)失效,许多请求在未建立缓存的时候就直接到数据库请求,导致持久层的压力过大。就像雪崩一样都是key因为一些情况失效,导致持久层压力过大,但是雪崩是大量的key而击穿是科比喜欢单点突破。
总结
我们主要对缓存失效的原因去分辨是发生了什么问题,像数据库不存在就是穿透。大量key因为同时失效就是雪崩,而击穿就是一个热点key失效。