缓存雪崩

本文章是记录作者学习 极客时间 分布式缓存课程 的笔记, 非喜勿扰!

缓存雪崩发生场景一:

       在商品抢购,一波商品时间比较集中的放入缓存中,假设缓存设置一个小时,当过期时间到达后,这批商品会统一失效,而对于这批商品的访问查询,会直接落到数据库上,对于数据库而言,就会产生周期性的压力波峰,甚至会造成数据库宕掉。

 

解决方案一:

一个是将缓存失效时间分散开,比如在原来的失效时间基础上,去增加一个随机值,比如1~5分钟随机,这样每个缓存的过期时间的重复率大大降低,也就不会造成集体失效了

 

解决方案二:

缓存不过期

 

缓存雪崩造成的后果:

在流量高峰的时候,某个缓存服务器节点出现宕机或者出现问题,导致缓存流量直接透传到数据库上面,更严重的是某个缓存服务器出问题,导致整个缓存集群出现额问题。

    下图左图是一个缓存节点直接透传去请求数据库了, 

    下面右图是整个缓存集群都挂掉了

 

 

缓存雪崩发生的场景二:

    一个key 非常热点,在不停的扛着大量并发,大量并发集中对这个点进行访问,当这个key 失效的瞬间,持续的大并发就会穿透缓存,直接请求到数据库,就像在一个屏障上凿开一个洞,又名缓存击穿

 

如何来发现热点缓存:

发现热点缓存的流程图,如下图;

 

执行流程:

      1、 当每次客户端的请求到达后台系统集群(系统集群)后, 服务实例会先去缓存中查询数据, 当查询到数据后,会把缓存数据的key 通过kafka 透传到 Fink(分布式的计算引擎) ,然后判断是否是热点数据,是的话会把热点数据通过请求传给监控系统,

监控系统会通知应用服务某个key是热点,应用可以根据这个key 进行重新hash ,将热点数据重新分不到不同的节点上。

     2、 如果这个热点key 重新hash 打散到不同的节点上, 请求量过来热点key是否均匀的分部到缓存集群不同的分片中, 缓存不够可以添加内存

 

     

 

 

方案二:

    通过一个访问用户中心的案例来做说明;

    通过判断数据访问的最新时间来做个排名, 过滤掉不常访问的数据,留下经常访问的数据,可以通过缓存系统做一个排序队列, 系统会根据访问时间做一个排名,最近访问的数据要越靠前。

    每次请求到达时现请求排序队列,命中后再通过userId 去缓存中查数据

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值