请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

二级缓存如何避免缓存雪崩?数据预热如何实现?

老师,做二级缓存,A1为原始缓存,A2为拷贝缓存,A1失效时,可以访问A2,A1缓存失效时间设置为短期,A2设置为长期。这样能避免雪崩,我不是很明白。一级缓存集中失效,都是查二级缓存,到时候二级缓存又集中失效,不还是会集中访问数据库吗?失效时间不错开,二级三级缓存又有什么用呢?另外问一下,数据预热可以避免雪崩,这个大致是怎么实现的?

正在回答 回答被采纳积分+3

1回答

翔仔 2020-11-12 01:00:26

同学好,没太明白同学的意思,A2的缓存为什么是集中失效呀,可以设置随机过期时间呀,此外,同学说的雪崩概率也很小吧,A1如果全部失效,请求打到A2,那么反过来如果A2集中失效的时候,A1应该已经恢复并且能扛了吧,如果两者都失效肯定就挂了,所以失效时间要错开啊,同学一开始也说了一个是短期一个是长期。我理解的二级缓存应该指的是一种旁路,或者另外一种存储介质。比如说A1是你的本地缓存,A2是redis缓存,存在别的机器上。此外,同学还可以设置一个兜底数据,就是当所有缓存都失效,就直接返回写死的兜底数据,保证服务可用。此外,数据预热主要就是根据业务形态,提前给缓存注入一些业务经常要查询的数据,这样就能够提前有缓存来扛请求了,这个就和solr或者es的热身原理是一样的。

0 回复 有任何疑惑可以回复我~
  • 提问者 慕虎7161837 #1
    A2缓存可以设置随机过期时间,这个我明白,但这本质就不叫二级缓存可以避免雪崩了,而是随机过期时间可以避免雪崩。正常情况下一级缓存查不到就去查二级缓存,二级缓存查不到就会去查数据库,然后查到后一起更新一二级缓存,是这样操作吗?如果是的话,那怎么在去查二级缓存的同时就更新一级缓存而避免二级缓存被击穿呢?这个实现的前后逻辑关系我没理解
    回复 有任何疑惑可以回复我~ 2020-11-12 08:45:58
  • 翔仔 回复 提问者 慕虎7161837 #2
    我觉得不是说随便设置一个二级缓存就避免雪崩了吧,这个需要看应用场景,像同学说的应该就是一个是热点缓存,一个是兜底缓存,热点缓存里面的过期时间较短,然后兜底较长,这样在一级缓存瞬时过期数据较多,而且流量激增的情况下,达到降级阈值,此时就不去查数据库,而直接走的兜底缓存,这样避免数据库被打爆。然后更新机制主要是看业务怎么定的,如果查询qps很高,数据量查询很多,一般会有外部服务,定期把数据给存到缓存redis里,这样查询的时候,只会有少量数据双写回缓存里。
    回复 有任何疑惑可以回复我~ 2020-11-13 00:31:18
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信