这三个词面试中几乎必问,而且很多人分不清。
缓存穿透
现象:查询的数据在数据库也不存在,缓存自然也没有。每次请求都打到数据库。
解决方案: 1. 布隆过滤器:预先把所有可能查询的 key 存到布隆过滤器中,不存在的直接过滤 2. 缓存空对象:即使查不到也缓存一个空值,设置短过期时间
缓存击穿
现象:一个热点 key 过期了,大量并发请求同时打到数据库。
解决方案: 1. 互斥锁:第一个请求去查数据库并更新缓存,其他请求等待 2. 永不过期:热点数据不设过期时间,用异步方式更新
缓存雪崩
现象:大量 key 同时过期,请求全部打到数据库。
解决方案: 1. 过期时间加随机值:避免大批量同时过期 2. 多级缓存:本地缓存 + Redis + 数据库 3. 限流降级:数据库扛不住时做服务降级
怎么记
- 穿透:数据根本不存在 → 布隆过滤器
- 击穿:热点 key 过期 → 互斥锁
- 雪崩:大量 key 同时过期 → 随机过期时间
记住这三个场景的差异和解决方案,Redis 面试就稳了一半。
评论
评论已关闭。