1、雪崩
当缓存系统宕机后,原先由缓存系统负担的请求处理瞬间落在了系统DB上,过高的并发量导致系统宕机。这便是缓存雪崩。
解决方案
1、事前 搭建高可用Redis环境,主从+哨兵,多节点,避免全盘崩溃
2、事中 本地ehcache缓存 + hystrix限流&降级,避免DB被高并发打死
3、事后 Redis持久化,一旦重启机器,自动从磁盘恢复数据,快速恢复缓存数据
2、过多且频繁的请求缓存中不存在的数据,将会导致直接请求DB,这便是缓存击穿。
解决方案
1、单一线程处理key值
2、互斥锁是业界比较常用的做法,是使用mutex。简单地来说,就是在缓存失效的时候(判断拿出来的值为空),不是立即去load db,而是先使用缓存工具的某些带成功操作返回值的操作(比如Redis的SETNX或者Memcache的ADD)去set一个mutex key,当操作返回成功时,再进行load db的操作并回设缓存;否则,就重试整个get缓存的方法