MemCache缓存雪崩现象

MemCache缓存雪崩现象

什么是缓存的雪崩现象

缓存雪崩一般是由某个缓存节点失效,导致其他节点的缓存命中率下降, 缓存中缺失的数据(memcache经典场景,当有一个客户端的服务请求过来的时候,首先去查memcache,memcache里面是否缓存过了这个数据,如果没有这个数据,我们就去数据库查询,如果有这个数据,我们就从memcache里面取出来,然后给它返回到客户端,这是一个经典的查询过程,在这个场景中,缓存中缺失的数据,是因为它的缓存节点失效了,所以缺失的数据将去数据库查询。去数据库查询.短时间内,造成数据库服务器崩溃.

重启 DB,短期又被压跨,但缓存数据也多一些.

DB 反复多次启动多次,缓存重建完毕,DB 才稳定运行.

或者,是由于缓存周期性的失效,比如每 8小时失效一次,那么每 8小时,将有一个请求”峰值”,

严重者甚至会令 DB 崩溃.

Memcache1.png

上图是之前部门的一个缓存的真实现象,具体是这样的 缓存的数据设置成为每8个小时失效一次,导致最终的结果是每8个小时数据库的压力就变大一次,每8个小时我们的数据库就会迎来一次请求的高峰,因为之前设置的缓存已经失效了。最终导致数据库的压力变得非常大。

有什么好的解决方案

这个没有完美解决办法,但可以分析用户行为,尽量让失效时间点均匀分布。不用把时间都设置成8小时一次,可以把里面的数据随机分布,比如设置成3—8小时随机的失效,就不会导致数据库的压力变得非常大。

即可以这样:

在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。 不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀。 做二级缓存,A1为原始缓存,A2为拷贝缓存,A1失效时,可以访问A2,A1缓存失效时间设置为短期,A2设置为长期,变相使缓存时间均匀一些。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值