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

来源:4-10 Pipeline及主从同步

慕虎7161837

2020-11-10

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

写回答

1回答

翔仔

2020-11-12

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

0
2
翔仔
回复
慕虎7161837
我觉得不是说随便设置一个二级缓存就避免雪崩了吧,这个需要看应用场景,像同学说的应该就是一个是热点缓存,一个是兜底缓存,热点缓存里面的过期时间较短,然后兜底较长,这样在一级缓存瞬时过期数据较多,而且流量激增的情况下,达到降级阈值,此时就不去查数据库,而直接走的兜底缓存,这样避免数据库被打爆。然后更新机制主要是看业务怎么定的,如果查询qps很高,数据量查询很多,一般会有外部服务,定期把数据给存到缓存redis里,这样查询的时候,只会有少量数据双写回缓存里。
2020-11-13
共2条回复

剑指Java面试-Offer直通车 百度资深面试官授课

招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航

8427 学习 · 1870 问题

查看课程