本地缓存有什么优缺点(本地缓存的正确使用姿势之主动更新)

背景

在业务开发过程中,对于数量较少且访问频繁的数据,需要使用本地缓存;对于本地缓存的失效策略,通常是超时被动失效;然后再次访问时,通过回表,reload数据,将最新版本的数据更新至缓存中;

但是在某些场景下,需要主动刷新缓存中的内容(失效或者刷新),虽然我们可以通过设置较短的过期时间达到相同的目的,但是开销相对较高;如何实现类似于分布式缓存监听MQ消息,及时失效缓存呢?

类比分布式缓存的解决方案

在分布式缓存中,我们通常采用的是监听消息队列及时失效缓存;多实例服务的任一实例,监听到消息后及时更新缓存,其他实例也能读取到最新的数据;但是对于本地缓存就大不一样,每个实例在自己的内存维护一份数据,当消息被其中一个实例消费后,就无法被其他实例感知到,所以需要解决一条消息如何被多实例消费的问题;

本地缓存有什么优缺点(本地缓存的正确使用姿势之主动更新)(1)

本地缓存主动失效策略 a

本地缓存有什么优缺点(本地缓存的正确使用姿势之主动更新)(2)

本地缓存主动失效策略 b

在这个方案中,存在两种角色,本地缓存MQ适配器本地缓存MQ处理器

适配器:将MQ消息转发成多实例消息,发送至处理器监听的MQ中;

处理器:调用指定服务缓存更新接口,更新本地缓存;

这种方案存在的问题是

  1. 服务的实例可能发生宕机或者其他特殊情况,指定ip进行调用时可能出现调用失败的情况,需要存在重试机制,保证服务重新连接后能正常更新缓存;
  2. 无论是策略a还是策略b都存在放大效应,M条消息最终会产生M*N次调用,同时本地缓存实现方需要实现特定的缓存失效接口,接入成本较高;
利用配置中心进行本地缓存的失效

鉴于上面的方案存在种种问题,所以需要采用一种更佳的方案,实现本地缓存的及时失效;目前市面上的配置中心都有推送的功能,对于配置发生变化时,可以及时地推送至所有实例中,因此,可以采用对配置中心指定key进行写操作,然后监听key进行缓存的失效;

本地缓存有什么优缺点(本地缓存的正确使用姿势之主动更新)(3)

读写配置中心失效本地缓存

该方案仅适用于支持推送的配置中心,对于只支持定时拉取的配置中心,此方案的更新时间可能存在一定的延迟,效果未必优于定时任务主动失效缓存;

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页