Redis三大缓存异常问题
三大缓存异常问题穿透、击穿、雪崩一、问题归类属于Redis缓存高并发故障、缓存设计、数据库防护核心知识点。包括缓存击透、缓存击穿、缓存雪崩共性问题缓存与数据库数据不一致、高并发打垮数据库二、缓存击穿1.定义查询的数据缓存和数据库都不存在请求直接绕过Redis全部打到数据库。大量非法空请求反复查询不存在数据数据库压力暴涨。2.常见场景1.恶意攻击故意查不存在ID、负数ID、异常参数2.业务无效请求前端传错参数、过期订单、已删除数据3.解决方案1.布隆过滤器提前把所有合法的数据ID存入布隆过滤器请求先过滤不存在直接拦截不查缓存与数据库优点占用内存极小、拦截效率高缺点存在极小误判无法删除数据2、缓存空值/默认值查询数据库为空时Redis存入空对象、空字符串并设置较短的过期时间。后续相同请求直接命中缓存不在访问数据库3.接口参数校验拦截非法参数负数ID超长字符、违规格式直接返回报错4.限流封禁对高频异常IP、帐号限流恶意请求直接拉黑三、缓存击穿1.定义热点 Key 突然失效瞬间海量并发请求直接冲击数据库。特指单个超高热度 Key 过期瞬间压力击穿数据库。2.常见场景秒杀商品、首页爆款、热搜数据、高频访问单个缓存键过期。3.解决方案1.互斥锁分布式锁同一个 Key 只放行一个请求查数据库更新缓存其余请求等待重试。常用Redisson 分布式锁避免并发击穿。2.永不过期热点数据不设置过期时间后台定时主动更新缓存杜绝过期击穿。3.逻辑过期缓存不物理删除存入过期时间字段业务判断过期后异步更新旧数据照常返回。4.热点数据定时预热高峰期前主动刷新热门 Key避免集中过期。四、缓存雪崩1.定义大批量缓存 Key 同一时间失效 / Redis 服务宕机所有请求全部访问数据库瞬间压垮数据库。范围远大于击穿大量键集体失效。2.两大触发原因1.过期时间集中大量 key 设置相同 TTL同一时刻集体失效2.Redis 宕机、断电、集群故障、网络断开3.解决方案1解决批量过期雪崩过期时间加随机偏移量在原有过期时间基础增加随机秒数打散失效时间避免集体过期。分层缓存本地 JVM 缓存 Redis 二级缓存Redis 失效优先2解决 Redis 宕机雪崩Redis 集群高可用主从复制、哨兵模式、集群分片主节点故障自动切换从节点保证服务不挂。服务降级Redis 不可用时直接返回默认数据、兜底页面不再查询数据库。熔断机制数据库压力超限直接熔断拒绝新请求保护核心业务。限流削峰限制每秒请求量排队处理避免瞬间洪峰涌入。数据持久化RDBAOF 持久化宕机重启快速恢复缓存数据。五、三者核心区别1.穿透查不存在的数据请求穿过两层2.击穿单个热点key过期单点被瞬间打爆3.雪崩批量热点key失效/服务宕机大范围崩溃六、优化1.合理设计缓存过期时间杜绝统一过期2.读写分离分担数据库查询压力3.缓存更新策略统一更新数据库同步更新 / 淘汰缓存4.监控缓存命中率、接口 QPS提前预警异常