Redis三大缓存异常问题
2026/5/25 21:12:10 网站建设 项目流程

三大缓存异常问题:穿透、击穿、雪崩

一、问题归类

属于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)解决批量过期雪崩

  1. 过期时间加随机偏移量在原有过期时间基础,增加随机秒数,打散失效时间,避免集体过期。

  2. 分层缓存本地 JVM 缓存 + Redis 二级缓存,Redis 失效优先

(2)解决 Redis 宕机雪崩

  1. Redis 集群高可用主从复制、哨兵模式、集群分片,主节点故障自动切换从节点,保证服务不挂。

  2. 服务降级Redis 不可用时,直接返回默认数据、兜底页面,不再查询数据库。

  3. 熔断机制数据库压力超限直接熔断,拒绝新请求,保护核心业务。

  4. 限流削峰限制每秒请求量,排队处理,避免瞬间洪峰涌入。

  5. 数据持久化RDB+AOF 持久化,宕机重启快速恢复缓存数据。

五、三者核心区别

1.穿透:查不存在的数据,请求穿过两层

2.击穿:单个热点key过期,单点被瞬间打爆

3.雪崩:批量热点key失效/服务宕机,大范围崩溃

六、优化

1.合理设计缓存过期时间,杜绝统一过期

2.读写分离,分担数据库查询压力

3.缓存更新策略统一:更新数据库同步更新 / 淘汰缓存

4.监控缓存命中率、接口 QPS,提前预警异常

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询