聊聊缓存雪崩 击穿 穿透

雪崩造成的原因?

1.如果你不是主从或者集群部署,那么当你的一个redis节点挂掉,或者机器掉电了,那么你这个节点的key就会全部丢失,此时以前这个key的流量就会流向其他节点,而其他节点没有这些key,那么流量就会到达db重新加载数据到cache,那么你的db就可能被大流量超过你的所能承载的流量而被压垮。
2.如果你的大部分key设置了相同的过期时间,那么ky就会在相同的时刻失效,那么也会造成大流量流入到db而压垮你的db,一般会出现在你执行了一个离线任务定时更新key,此时你批量设置了key的过期时间而导致的。

解决方案

第一种情况你要设置你的cache而高可用,如redis要设置主从或者集群,然后加入哨兵,可以让你的redis支持流量的失效转移。
第二种情况你可以在批量设置key的失效时间的时候,加上一个随机值,如两个小时内的随机数,那么你的key就不会同时批量失效了。

如果已经发生了雪崩怎么办?

如果流量不是很大,你的db扛住了,恭喜你度过难关,当然这只是侥幸,哪天运营做了一个大活动,还是逃脱不掉,那么我们该怎么办呢?
其实就是限流,防止过多流量流入db,保护db的正常请求。
首先我们可以利用分布式锁,来保证,当前查询的key,只能一个流量去db查询,查询结果后,再放入cache,其他请求在这个过程中没有抢锁,就会阻塞,或者你设置一个超时时间,如果超时时间内,没有返回,那么直接返回空,或者进行重试,重试次数不能太多,防止服务资源占用过多,造成服务雪崩。这样通过分布式锁就限制了大部分流量流入db了,从而保护了db。
其次也可以直接通过限流算法,如令牌或者漏桶算法,限制当前查询key的多少流量能到达db。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值