缓存穿透、击穿、雪崩及解决方案?
Redis 面试题发布于
一、缓存穿透
查询不存在的数据,缓存和数据库都没有,请求全打到数据库。
解决方案: - 缓存空值(设置较短过期时间)。 - 布隆过滤器,不存在的 key 直接拦截。
二、缓存击穿
热点 key 过期瞬间,大量并发请求打到数据库。
解决方案: - 互斥锁(setnx),只有一个请求查库并回填缓存。 - 热点 key 永不过期,逻辑过期 + 异步刷新。
三、缓存雪崩
大量 key 同时过期或 Redis 宕机,请求全部打到数据库。
解决方案: - 过期时间加随机值,避免集中过期。 - 多级缓存(本地缓存 + Redis)。 - Redis 高可用集群,熔断降级。