缓存击穿,缓存穿透,缓存雪崩 - 智学轩城

缓存击穿,缓存穿透,缓存雪崩

良伯珹头像

良伯珹

2025-12-28 17:00:24

那天在咖啡馆,点了一杯拿铁,边喝边想。缓存击穿、缓存穿透、缓存雪崩,这些概念就像咖啡里的奶泡,看似复杂,其实背后都是简单的道理。
缓存击穿,记得有一次,项目上线初期,数据库刚更新完数据,缓存还没来得及刷新。突然,用户请求量激增,所有请求都直接打到了数据库上,导致数据库瞬间崩溃。那天是2013年,地点是北京,数据库崩溃了整整一小时。
缓存穿透,那是在2015年,有一次用户输入了不存在的查询条件,结果请求直接绕过了缓存,直接打到了数据库。那天下午,我花了两个小时排查问题,发现是因为缓存没有正确处理不存在的键。
缓存雪崩,这个更离谱。2017年,有一次我们的缓存服务器集体宕机,所有的缓存都失效了。那几天,我们的系统就像一片雪花,纷纷落下,无法正常工作。
等等,还有个事,我突然想到。缓存击穿、穿透、雪崩,这些都是因为缓存策略没做好。那我们该如何避免这些情况呢?

宇文叔石头像

宇文叔石

2026-04-05 13:39:33

你这个问题有点技术含量。缓存击穿、缓存穿透和缓存雪崩,这都是缓存系统可能出现的问题。
首先说说缓存击穿。这通常发生在缓存中某个热点key在失效后,访问量突然增加,导致请求直接打到了数据库上。比如,某个热门商品的ID作为缓存key,缓存失效了,这时候访问量突然大增,数据库就承受不住了。这种情况2022年我在北京一家电商公司就遇到过,那会儿流量一上来,数据库直接崩溃。
缓存穿透,这就像是有人故意来查数据库里没有的数据。比如说,有人输入了不存在的ID去查询,这种请求就会直接穿透到数据库,导致数据库的压力增大。我记得2021年在深圳一家公司做项目时,就有用户利用缓存穿透搞了一次小破坏。
最后是缓存雪崩。这种情况一般是因为缓存中大量的key同时失效,导致大量的请求都直接打到数据库上,数据库瞬间承受不住。我2020年在杭州做项目时,就碰到过一次缓存雪崩,那天晚上服务器差点就瘫痪了。
总之,这三种情况都是缓存系统设计或运维时需要特别注意的。缓存击穿和穿透可以通过设置热点key的过期时间、布隆过滤器等方式来防范;缓存雪崩则可以通过设置合理的过期时间、增加缓存容量、使用分布式缓存等方式来减轻影响。反正你看着办吧,这些都是缓存系统优化的一部分。我还在想这个问题,哈哈。

竭叔蔼头像

竭叔蔼

2025-11-04 17:48:07

记得那年初夏,我还在一家电商公司做技术支持,那天服务器突然卡得厉害,订单处理速度慢得像蜗牛。我去排查,发现是因为一个热门商品,用户疯狂下单,导致数据库直接被打爆了。等等,我突然想到,这不就是缓存击穿嘛!
原来,那款商品在缓存中并没有命中,每次请求都要去数据库查询,随着请求量激增,数据库的压力越来越大。缓存穿透,就是缓存和数据库中都没有的数据,导致请求全部落到数据库上,就像直接穿透了缓存层。
然后,我查了查日志,发现还有大量请求因为缓存失效而再次查询数据库,这就是缓存雪崩。那天下午,系统几乎瘫痪,我们紧急扩容数据库,同时优化了缓存策略,设置热点数据永不过期,冷数据定期更新。
那次经历让我深刻理解了缓存击穿、穿透和雪崩的区别。那么,除了这些,还有哪些缓存相关的坑是我们需要注意的呢?

寿叔涛头像

寿叔涛

2025-11-14 12:36:16

上次有个客人问我,说他们系统里经常出现缓存击穿、缓存穿透和缓存雪崩这些问题,挺头疼的。那我就给他解释一下,这都是缓存相关的一些故障现象。
首先,缓存击穿,这就像是某个特别热门的商品突然降价,所有的人都来抢购,这时候数据库压力就大了。缓存击穿就是指缓存中某个key过期了,刚好这个时候有大量的请求过来,这些请求都会直接打到数据库上,因为缓存里没有这个key的值。这种情况在单点缓存系统中比较常见,比如Redis的单线程特性。
然后,缓存穿透,这个更直接了。它是指查询不存在的数据,因为缓存中没有,数据库中也没有,所以每次请求都会直接打到数据库上。这种情况对数据库的压力很大,就像是在搜索引擎里输入一个根本不存在的词,然后搜索引擎还得去数据库里查一遍。
最后,缓存雪崩,这就像是一个冬天,下了一场大雪,把所有的树木都压倒了。缓存雪崩是指缓存中大量的key同时过期,导致所有请求都去访问数据库,数据库承受不住这么大的压力,整个系统就会崩溃。这种情况比较危险,因为它不是单个点的问题,而是整个系统的问题。
我自己的踩过的坑是,之前在一个项目里,没有处理好缓存过期策略,导致缓存雪崩,整个系统瘫痪了好几个小时。所以,缓存管理真的很重要,得好好设计缓存策略,避免这些问题的发生。反正你看着办,做好缓存管理,系统才能更稳定。我还在想这个问题呢,怎么才能更好地优化缓存策略。