缓存雪崩和缓存穿透的区别 - 智学轩城

缓存雪崩和缓存穿透的区别

姒孟籁头像

姒孟籁

2025-05-20 18:03:01

这俩概念啊,得说说。缓存雪崩,那得追溯到2011年,当时京东就遇到过。说起来,那会儿的缓存系统挺先进的,结果因为某些热门商品下架,缓存里的数据都失效了,瞬间访问量激增,服务器直接崩溃了。这就像下雪时,一片片雪花都堆在一起,最后压垮了屋顶。
再说说缓存穿透,这事儿得追溯到2012年左右。当时有个黑客,他专门找那些缓存里没有数据但数据库里有记录的请求,比如查询不存在的用户信息。这样一搞,数据库直接被查爆了。
俩区别呢,首先看触发原因。缓存雪崩是因为缓存数据大面积失效,而缓存穿透是因为查询了不存在的数据。其次,影响范围。缓存雪崩是整个系统受影响,缓存穿透则是针对某个特定请求。最后,解决办法也不同。缓存雪崩得加强缓存失效策略,缓存穿透得设置布隆过滤器。
说实话,我当时也没想明白这俩到底有啥区别,后来查了资料,慢慢就明白了。不过,这俩问题都是缓存系统常见的,得提前预防。

今夜酷寒不宜裸奔 头像

今夜酷寒不宜裸奔

2025-02-05 12:23:18

上周,2023年,我那个朋友问我缓存雪崩和缓存穿透的区别。
缓存雪崩,就像是冬天堆的雪人,因为温度突然升高,所有的雪人都在同一时间融化。缓存雪崩就是指缓存中大量数据同时失效,导致系统压力剧增。
缓存穿透,则像是有人用棍子直接捅进了雪人,直接穿透了雪人,没有雪融化。缓存穿透是指查询不存在的数据,导致请求直接打到数据库上。
一言以蔽之,缓存雪崩是大量缓存同时失效,缓存穿透是查询不存在的数据。
每个人情况不同,但这两个概念在缓存设计中都很重要。本质上,缓存就是为了减少数据库的访问压力,但如果缓存管理不当,反而会增加数据库的压力。
这部分我不确定,但我觉得缓存设计时,应该充分考虑这两种情况,避免系统出现故障。你看着办,我觉得缓存预热、过期策略、布隆过滤器等方法可以一定程度上解决这些问题。

缪伯武头像

缪伯武

2026-02-11 16:11:42

这俩问题得分开说。先说缓存雪崩吧,这事儿我亲身经历过。那会儿是2017年,公司刚上了一个新系统,缓存用的Redis。结果有一次晚上,Redis突然全挂了,系统直接瘫痪了,那叫一个惨啊。缓存雪崩就是所有缓存同时失效,就像是多米诺骨牌一样,一个倒了,后面的全跟着倒。这个情况一般是因为缓存时间设置得短,或者缓存值过期了,然后一大波请求直接打到了数据库上。
再来说缓存穿透。这事儿我也是有经验的。记得那是2015年,有个电商网站,用户量突然激增,结果有个黑客直接攻击,把所有用户都没缓存过的数据都给查了。缓存穿透就是请求直接访问不存在的缓存数据,这样数据库就承受了巨大的压力。解决方法通常是布隆过滤器,能过滤掉很多无效请求。
总之,缓存雪崩和缓存穿透都是因为缓存出了问题,但原因和处理方式不一样。雪崩是缓存失效了,穿透是请求根本就没有缓存。