缓存雪崩是指比如我们给所有的数据设置了同样的过期时间,然后在某一个历史性时刻,整个缓存的数据全部过期了,然后瞬间所有的请求都落到数据库,数据库被压垮,或者是缓存发生故障,导致所有的请求都落入到数据库,数据库被压垮。
缓存雪崩的核心就是你的缓存不能用了,不能用了包含两种情况:
突然有一个高并发请求:
1我要查的数据缓存都没有,那么都查询数据库,数据库可能被查询宕机;
2缓存本身就不能用了,比如缓存宕机了,那么也导致所有请求都查询数据库,数据库宕机
解决方案
事前:redis要高可用(搭建集群或者主从哨兵),避免redis不可用;
事中:本地ehcache缓存(mybatis二级缓存)+限流&降级,避免数据库被压垮;
事后:redis持久化,快速恢复缓存数据;