缓存雪崩发生的原因
现象:查询缓存无数据或者缓存服务挂掉,导致大量请求到mysql,造成极大压力甚至搞垮数据库
原因一:许多缓存的数据同一时间失效
解决方案:过期时间加上随机值
原因二:缓存服务器挂掉
解决方案:
-
事前:redis高可用,主从+哨兵,redis cluster,避免全盘崩溃
-
事中:本地ehcache缓存 + hystrix限流&降级,避免MySQL被打死
-
事后:redis持久化,快速恢复缓存数据
![](https://i-blog.csdnimg.cn/blog_migrate/5f9ac12b4edf7a00ec263e962ee6a02a.png)
缓存穿透的现象以及解决方法
查询缓存中不存在的数据,会导致查询数据库,发现也没有结果所以就不进行缓存,下次查询的时候还会访问缓存+访问数据库。导致mysql压力过大
很可能是恶意访问
解决方案:
- 参数校验
- 布隆过滤器
- 缓存空值
![](https://i-blog.csdnimg.cn/blog_migrate/fcabd2772ef289ac6956525a9c58e7f2.png)