缓存穿透、击穿、雪崩及解决方案?

发布于

一、缓存穿透

查询不存在的数据,缓存和数据库都没有,请求全打到数据库。

解决方案: - 缓存空值(设置较短过期时间)。 - 布隆过滤器,不存在的 key 直接拦截。

二、缓存击穿

热点 key 过期瞬间,大量并发请求打到数据库。

解决方案: - 互斥锁(setnx),只有一个请求查库并回填缓存。 - 热点 key 永不过期,逻辑过期 + 异步刷新。

三、缓存雪崩

大量 key 同时过期或 Redis 宕机,请求全部打到数据库。

解决方案: - 过期时间加随机值,避免集中过期。 - 多级缓存(本地缓存 + Redis)。 - Redis 高可用集群,熔断降级。