数据库 技术随笔

Redis 缓存穿透、击穿、雪崩:原理与解决方案

引入 Redis 缓存后,系统扛住了大部分读请求,但缓存一旦出问题,流量会直接打到数据库。缓存穿透、击穿、雪崩是三个最典型的故障场景,面试和实战中都高频出现。

一、缓存穿透

查询一个根本不存在的数据,缓存和数据库都没有,请求每次都打到数据库。

解决方案:① 接口层做参数校验;② 缓存空值(设短过期时间);③ 使用布隆过滤器(BloomFilter)拦截不存在的 key。

二、缓存击穿

某个热点 key 在过期瞬间,大量并发同时来查询,瞬间击穿到数据库。

解决方案:① 热点 key 不过期或逻辑过期;② 互斥锁(如 Redis 的 SETNX)只放一个请求回源,其余等待。

三、缓存雪崩

大量 key 在同一时间集中过期,或 Redis 宕机,导致数据库瞬时压力暴增。

解决方案:① 给过期时间加随机值,错开失效点;② 集群部署 + 高可用(哨兵/Cluster);③ 限流降级,保护数据库。

四、一句话总结

问题原因对策
穿透查不存在的数据空值缓存 / 布隆过滤器
击穿热点 key 过期互斥锁 / 不过期
雪崩大量 key 同时失效过期随机化 / 高可用
标签
Redis缓存高可用