课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
数据一致性问题以及缓存过期问题都是程序员在学习缓存技术应用需要重点关注的问题之一,而本文我们就通过案例分析来了解一下,多层级缓存数据一致性与缓存过期问题分析。
1、数据一致性
数据一致性问题主要体现在缓存更新的时候,如何更新缓存,保证数据库与缓存以及各层缓存层之间的一致性。
在单层缓存系统中,我们可以先删除缓存然后更新数据库的方案来解决其数据一致性问题,那么对于多级缓存呢?如果使用这种方案,我们需要考虑,如果先删除缓存,那么需要逐层去做删除操作,那么这一系列操作对系统带来的耗时也是和可观的。
如果我们使用分布式事务机制,就需要考虑该不该将写缓存放入事务当中,因为我们更新分布式缓存,需要走网络通信,大量的请求将导致网路抖动甚至阻塞,增加了系统的延迟,导致系统短时间内不可用。如果我们不将写缓存这一操作放入事务当中,那么可能引起短时间内数据不一致。这也就是分布式系统的CAP理论,我们不能同时达到高可用和一致性。那么该如何抉择呢?
这里我们选择保证系统的可用性,就一个秒杀系统来讲,短暂的不一致性问题对用户的体验影响并不大(当然,这里不涉及支付系统),而可用性对用户来说却很重要,一个活动可能在很短的时间内结束,而用户需要在这段时间内抢到自己心仪的商品,所以可用性更重要一些(这里需要根据具体场景进行权衡)。
在保证了系统的可用性的基础上,我们该如何实现呢?如果实时性要求不是很高,我们可以采用全量+增量同步的方式进行。我们可以按照预计的热点key对系统进行缓存预热,全量同步数据到缓存系统。在需要更新缓存的时候,我们可以采用增量同步的方式更新缓存。比如我们可以使用阿里Canal框架同步binlog的方式进行数据的同步。
2、缓存过期
缓存系统中的所有数据,根据数据的使用频率以及场景,我们可以分为过期key以及不过期key,那么对齐过期缓存我们该如何淘汰呢?下面有常用的几种方案:
FIFO:使用FIFO算法来淘汰过期缓存。
LFU:使用LFU算法来淘汰过期缓存。
LRU:使用LRU算法来淘汰过期缓存。
以上几种方案是在缓存达到大缓存大小的时候的淘汰策略,如果没有达到大缓存大小,我们有下面几种方式:
定时删除策略:设置一个定时任务,在规定时间内检查并且删除过期key。
定期删除策略:这种策略需要设置删除的周期以及时长,如何设置,需要根据具体场合来计算。
惰性删除策略:在使用时检查是否过期,如果过期直接去更新缓存,否则直接返回。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。