redis 缓存雪崩,穿透,击穿解决方案

437 阅读1分钟

缓存雪崩 Cache Avalanche

问题描述

缓存雪崩指redis cluster全面宕机,客户端请求无法从redis中获取数据,从而将大量请求打向mysql,导致mysql处理的请求数飙升,db挂掉,导致服务不可用。

2021-06-25_100124.png

解决方案

1 保证redis cluster高可用,主从架构,哨兵模式
2 降级&限流,避免mysql承担过大压力
3 redis持久化,故障恢复后迅速重启,支持服务

缓存穿透 Cache Penetration

问题描述

缓存穿透指mysql和redis中都没有用户想要查询的数据,比如黑客模拟请求攻击,导致db打满。

解决方案

1 业务层处理方案:在业务中校验请求参数格式,校验查询redis key格式,不符合该场景下key格式的一律返回错误
2 存储层处理方案:查询数据为空时,在redis中set key NULL ,避免查询不到请求DB
3 使用布隆过滤器存储key,请求进来时,现在布隆过滤器中查找,如果结果为0,则返回空,不去redis中查询

缓存击穿 Hotspot Invalid

问题描述

某个key为热点数据,当设置的expire时间过期时,大量请求查询不到,从到访问DB,造成DB瓶颈。

解决方案

1 避免大量key在同一个时间同时过期,可以设置key的expire time为某个区间的随机值
2 启动一个CT任务,对redis中即将过期的key重新设置新的expire time(该方案会增加维护成本)