一、 缓存雪崩
缓存挂了以后,大量请求拖垮后面的数据库。
如何解决缓存雪崩?
1、 事前
redis高可用,主从+哨兵,rediscluster,避免全盘崩溃
2、 事中
本地ehcache缓存+hystrix限流&降级,避免mysql崩溃
a、 在主访问系统中增加一个ehcache缓存,这个缓存可以不大
b、 用户发送请求,先查本地ehcache缓存,如果没有再查redis
c、 如果ehcache和redis都没有,就查数据库
d、 将数据库中的结果,写入ehcache和redis
hystrix限流&降级
a、 限流组件,你可以设置,假设限制每秒就2000个请求,一秒过来5000个请求,此时只有2000个请求会通过限流组件,进入数据库。
b、 剩余的3000个请求怎么办?走降级,限流组件会发现现有3000个请求没法通过自己,会调用你自己开发好的一个降级的组件,返回一些默认的值,或者友情提示,或者空白值。
c、 好处1:数据库绝对不会崩溃,限流组件就确保了每秒只会过去2000个请求。
d、 好处2:只要数据库不崩溃,就是对用户来说,2/5的请求都是可以被处理的。
e、 好处3:只要有2/5的请求可以被处理,就意味着你的系统没死,对用户来说,就是可能点击几次刷不出来页面,但是多点几次就刷出来页面了。
3、 事后
redis持久化,快速恢复缓存数据
二、 缓存穿透
缓存和数据库中都没有请求的数据,直接穿过缓存,大量访问数据库,数据库就崩溃了。
解决:每次系统从数据库中只要没查到,就写一个空值到缓存里
标签:ehcache,缓存,请求,数据库,redis,穿透,限流,雪崩 From: https://blog.51cto.com/u_15973676/6069328