缓存失效
问题描述:
大量Key同时过期,cache访问miss,穿透到DB,DB压力大增,慢查率增大
业务场景:
1、同一批次的火车票,发布时,一次性加载到缓存,后续会同时缓存失效
2、后台系统计算出热门微博,批量加载到缓存
3、缓存预热,一次性加载最新N小时的数据
解决方案:
过期时间策略:base + random
缓存穿透
问题描述:
查询一个不存在的key,每次访问都穿刺到DB,对DB造成压力
业务场景:
1、通过不存在的UID,访问不存在的用户
2、通过不存在的车次ID,访问不存在的车票信息
解决方案:
方案1:不存在的key,在cache中缓存一个默认值。(不存在的key在额外缓存,先查正常缓存,没有则查额外非法缓存,没有在穿透DB并缓存,存在非法缓存中则返回,非法缓存需定期过期)
方案2:构建BloomFilter过滤器,过滤非法key访问。
缓存雪崩
问题描述:
部分缓存节点不可用,导致整个缓存体系、服务系统不可用的情况。
情况1:缓存不rehash,雪崩跟较多缓存节点不可用相关,大量请求穿透,DB过载不可用,进而导致整个服务异常。
情况2:缓存支持rehash,雪崩跟流量洪峰有关,部分缓存节点过载crash,过载扩散,引发整个缓存异常不可用。
业务场景:
1、突发洪水流量,部分cache过载,进而整个cache池过载异常
2、计架断电,cache节点宕机,大量请求打到DB,服务异常
解决方案:
方案1:增加DB读写开关,慢查询超过阈值,关闭开关,failfast
方案2:多副本cache架构,任何cache池miss后,读其它cache副本
方案3:实时监控,及时发现并恢复,增加自动故障转移策略