关于Redis的缓存雪崩、缓存击穿、缓存穿透
对于发生的故障是缓存雪崩、击穿、穿透,是由发生时的类型决定的,对于不同的类型虽说有不同的解决方案,但是设计一套灵活且周密的架构才是核心。
缓存穿透
在缓存中未命中,在数据库中也未命中;由于大量请求在缓存中未命中导致数据库层压力巨大出现故障
应对策略
- 缓存null对象
- 增加白名单
- 拦截非法请求
缓存击穿
大量热点频繁Key过期,导致数据库压力在某一时刻增大出现故障
应对策略
- 热点key不设置过期时间,由后台动态处理
- 增加互斥锁机制,只能有一个请求进行处理一个Key的的缓存
缓存雪崩
大量key都过期,或者缓存宕机,导致请求都走到数据库
应对策略
- 均匀设置过期时间,避免一起过期造成的雪崩
- 增加互斥锁机制
- 双Key策略,主Key失效了,使用从Key,当数据更新时,主Key和从Key都进行更新
- 服务熔断
- 请求限流
- 集群redis,哨兵,集群等
不难看出上面其实就是发生时刻的类型决定的结果,其实我们在设计系统时刻,根据不同的业务,规模,环境等情况,使用不同的架构才能保证系统的安全,高可用。