Redis 高频面试题:缓存穿透、雪崩、击穿到底有什么区别?

这三个词面试中几乎必问,而且很多人分不清。

缓存穿透

现象:查询的数据在数据库也不存在,缓存自然也没有。每次请求都打到数据库。

解决方案: 1. 布隆过滤器:预先把所有可能查询的 key 存到布隆过滤器中,不存在的直接过滤 2. 缓存空对象:即使查不到也缓存一个空值,设置短过期时间

缓存击穿

现象:一个热点 key 过期了,大量并发请求同时打到数据库。

解决方案: 1. 互斥锁:第一个请求去查数据库并更新缓存,其他请求等待 2. 永不过期:热点数据不设过期时间,用异步方式更新

缓存雪崩

现象:大量 key 同时过期,请求全部打到数据库。

解决方案: 1. 过期时间加随机值:避免大批量同时过期 2. 多级缓存:本地缓存 + Redis + 数据库 3. 限流降级:数据库扛不住时做服务降级

怎么记

  • 穿透:数据根本不存在 → 布隆过滤器
  • 击穿:热点 key 过期 → 互斥锁
  • 雪崩:大量 key 同时过期 → 随机过期时间

记住这三个场景的差异和解决方案,Redis 面试就稳了一半。

关于 Zihao Zhang

后端开发工程师。关注 Java/Spring Boot/Redis/MySQL 技术栈,分布式系统,OLAP 数据库,AI Agent 开发与应用。

评论

评论已关闭。