2021-02-22 13:02:13
Redis作为高性能内存key-value存储系统,在缓存场景中可能因缓存雪崩、缓存击穿、缓存穿透等异常导致系统压力激增甚至崩溃。以下是三类异常的核心问题与处理方案总结:
一、缓存雪崩是什么大量缓存数据同时失效或Redis服务故障,导致请求直接涌入数据库,引发数据库压力骤增甚至崩溃,形成连锁反应。
原因
处理方案
避免集中过期
随机分散过期时间:通过随机算法为key设置不同过期时间(如基础时间±随机秒数)。
双key策略:主key(短期过期)与备key(长期过期)配合,主key失效时访问备key。
后台更新:通过定时任务或消息队列异步更新缓存,避免批量失效。
Redis故障应对
高可用集群:部署主从节点或哨兵模式,主节点故障时自动切换从节点。
服务熔断与限流:熔断直接拒绝请求,限流按比例允许请求通过,防止数据库过载。

是什么高并发场景下,热点数据缓存过期时,大量请求同时穿透缓存直击数据库,导致数据库瞬时压力激增。与雪崩不同,击穿针对单一热点数据。
原因热点数据过期时间设置不合理,或并发请求量远超缓存更新速度。
处理方案
永不过期策略
对热点数据不设置过期时间,通过后台任务定期清理非必要数据。
互斥锁控制
第一个请求获取分布式锁后更新缓存,其他请求阻塞等待或返回旧值,避免并发查库。
示例:使用Redis的SETNX命令实现锁机制,锁释放后后续请求可直接命中缓存。
是什么请求查询的数据既不在缓存也不在数据库中(如恶意攻击使用非法key),导致每次请求均穿凯判透至数据库,形成无效查询洪流。
原因
处理方案
非法请求拦截
参数校验:过滤空值、非法格式等无效请求。
鉴权机制:限制未授权用户的查询权限。
缓存空值或默认值
对查库为空的结果缓存空值(如NULL),并设置短过期时间(如5分钟桐清),减少重复查库。
布隆过滤器预判
原理:通过多个哈希函数将key映射到位数组,快速判断key是否存在(可能误判但不会漏判)。
应用:在缓存层前部署布隆过滤器,拦截大部分不存在key的请求,降低数据库压力。
1. 缓存预热
小数据量:启动时自动加载。
大数据量:定时任务分批加载。
极大数据量:仅预热TOP N热点数据。
2. 缓存降级
返回内存缓存:直接读取本地内存中的缓存副本(可能非最新数据)。
返回默认值:如返回{"code":500,"msg":"服务降级"},避免系统崩溃。
Redis缓存异常的核心问题均源于缓存与数据库的同步失效或恶意请求攻击,处理方案需结合业务场景选择:
通过合理设计过期策略、引入分布式锁、使用布隆过滤器等手段,可显著降低缓存异常风险,保障系统高并发场景下的稳定性。