redis mysql 雪崩_Redis雪崩和穿透问题

现象:原本稳定的环境突然奔溃,并在重启后又短时间奔溃,查看mysql也是奔溃,访问过多。 判断缓存失效或主要功能的缓存失效。

措施: 查看redis是否怠机,并查看key值数量是否大规模失效, 若是就是redis雪崩问题

缓存雪崩的事前事中事后的解决方案如下。

事前:redis 高可用,主从+哨兵,redis cluster,避免全盘崩溃。

事中:本地 ehcache 缓存+ hystrix限流&降级,避免MySQL被打死。

事后:redis 持久化,一旦重启,自动从磁盘上加载数据,快速恢复缓存数据。

用户发送一个请求,系统 A 收到请求后,先查本地ehcache缓存,如果没查到再查redis。如果ehcache和redis都没有,再查数据库,将数据库中的结果,写入ehcache和redis中。

限流组件,可以设置每秒的请求,有多少能通过组件,剩余的未通过的请求,怎么办?走降级!可以返回一些默认的值,或者友情提示,或者空白的值。

好处:

数据库绝对不会死,限流组件确保了每秒只有多少个请求能通过。

只要数据库不死,就是说,对用户来说,2/5 的请求都是可以被处理的。

只要有 2/5 的请求可以被处理,就意味着你的系统没死,对用户来说,可能就是点击几次刷不出来页面,但是多点几次,就可以刷出来一次。

Redis穿透问题:

现象:mysql中某个查询和插入sql执行次数过多,并针对的是个别值,高并发时慢

解决措施:

1、设置布隆过滤器

原理就是一个对一个key进行k个hash算法获取k个值,在比特数组中将这k个值散列后设定为1,然后查的时候如果特定的这几个位置都为1,那么布隆过滤器判断该key存在。

布隆过滤器可能会误判,如果它说不存在那肯定不存在,如果它说存在,那数据有可能实际不存在;

代码:

先引入包,并查询时调用

1c5b026b09b097b76073028292ab88b4.png

3d264765b51db11f3ce94fb8c20ac00c.png

缺点:布隆过滤器不支持删值操作,并需维护布隆过滤器

2、可以通过双重检测+锁, 抢到锁的才能查询设置

ec594c358cdf739be82814227fc52ef3.png

68f724bad5a33d9a9f6bd2ca7369ecb7.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值