一种更新缓存数据的方法和装置制造方法及图纸

技术编号:29287096 阅读:14 留言:0更新日期:2021-07-17 00:03
本发明专利技术公开了一种更新缓存数据的方法和装置,涉及计算机技术领域。该方法的一具体实施方式包括:接收更新请求,根据所述更新请求生成将缓存数据更新至各个集群的父任务;其中,所述更新请求携带所述各个集群的信息和所述缓存数据的业务标识,所述父任务包括多个子任务;获取所述缓存数据,将所述缓存数据分别更新到所述各个子任务对应的集群中;分别向所述各个集群发送版本切换请求,所述版本切换请求携带所述缓存数据的版本信息。该实施方式能够解决缓存集群间的数据一致性的技术问题。够解决缓存集群间的数据一致性的技术问题。够解决缓存集群间的数据一致性的技术问题。

【技术实现步骤摘要】
一种更新缓存数据的方法和装置


[0001]本专利技术涉及计算机
,尤其涉及一种更新缓存数据的方法和装置。

技术介绍

[0002]为了承载海量的订单处理请求,缓存技术(如Redis)已经成为了标配的技术解决方案。但随着业务规模的发展扩大,往往会出现单个缓存集群无法再承载更大压力的情况。例如,客户端应用无限制地扩容机器,导致缓存客户端连接数量相应增涨;缓存集群的从实例挂载过多,主从之间的数据复制量大,复制链路过长等因素导致集群压力增大。为了解决该问题,可行的解决方案是:将该缓存集群全量复制成多个缓存集群,客户端应用垂直分组分布,不同的客户端应用连接不同的缓存集群,从而完成压力的分摊。但是该方案又会引出一个问题:如果这些客户端应用要求多个缓存集群间的数据强一致性,并且要求数据生效时间严格一致。否则不同的客户端应用会因为多个缓存集群的数据不一致,导致计算结果不一致,造成线上问题和客户体验的损失。目前主要有两种更新缓存数据的方式:单线程串行更新缓存数据和多线程并行更新缓存数据。
[0003]需要将同一份缓存数据写到多个缓存集群时,不论采用单线程串行更新缓存数据,还是采用多线程并行更新缓存数据,均会存在以下问题:
[0004]1)多个集群间的数据一致性无法得到保证:因为集群故障或网络故障等原因,出现部分集群数据刷新成功,部分集群数据刷新失败。
[0005]2)多个集群间的数据生效时间无法做到同步生效:采用单线程串行更新缓存数据,这种方案无法做到数据同步生效;而采用多线程并行更新缓存数据,由于存在操作系统底层对线程调度的不可控、JVM GC(垃圾回收机制)停顿、网络请求响应时间不会严格一致等多种因素,同样无法保证多个集群间的数据同步生效。

技术实现思路

[0006]有鉴于此,本专利技术实施例提供一种更新缓存数据的方法和装置,以解决缓存集群间的数据一致性的技术问题。
[0007]为实现上述目的,根据本专利技术实施例的一个方面,提供了一种更新缓存数据的方法,包括:
[0008]接收更新请求,根据所述更新请求生成将缓存数据更新至各个集群的父任务;其中,所述更新请求携带所述各个集群的信息和所述缓存数据的业务标识,所述父任务包括多个子任务;
[0009]获取所述缓存数据,将所述缓存数据分别更新到所述各个子任务对应的集群中;
[0010]分别向所述各个集群发送版本切换请求,所述版本切换请求携带所述缓存数据的版本信息。
[0011]可选地,根据所述更新请求生成将缓存数据更新至各个集群的父任务,包括:
[0012]根据所述更新请求生成任务注册表和将缓存数据更新至各个集群的父任务;
[0013]将所述父任务及其对应的子任务注册到所述任务注册表中;
[0014]其中,所述子任务的数量与所述集群的数量相同,所述任务注册表中保存有所述父任务的信息、所述父任务对应的各个子任务的信息、所述各个子任务的任务状态和所述缓存数据的版本信息。
[0015]可选地,获取所述缓存数据,将所述缓存数据分别更新到所述各个子任务对应的集群中,包括:
[0016]对于每一个子任务,获取所述缓存数据,将所述缓存数据更新到所述子任务对应的集群中,并将所述任务注册表中所述子任务的任务状态更新为成功。
[0017]可选地,分别向所述各个集群发送版本切换请求,包括:
[0018]扫描所述任务注册表中各个子任务的任务状态,判断所述各个子任务的任务状态是否均为成功;
[0019]若是,则分别向所述各个集群发送版本切换请求;
[0020]若否,则根据任务状态为失败的子任务构造异常任务,并将所述异常任务保存到异常任务表中;其中,所述异常任务表中保存有所述子任务的信息、重试次数、重试策略、任务状态和任务元数据。
[0021]可选地,将所述异常任务保存到异常任务表中之后,还包括:
[0022]扫描所述异常任务表,根据恢复策略重新执行所述异常任务表中的异常任务;
[0023]将所述任务注册表中所述异常任务对应的子任务的任务状态更新为成功。
[0024]可选地,所述任务元数据包括任务名称、执行任务的可重用组件名称和执行任务的方法;
[0025]扫描所述异常任务表,根据恢复策略重新执行所述异常任务表中的异常任务,包括:
[0026]扫描所述异常任务表中任务状态为待恢复的异常任务;
[0027]解析所述异常任务的任务元数据,并通过反射机制生成任务执行的可重用组件,以调用执行任务的方法,从而执行所述异常任务。
[0028]可选地,所述缓存数据的版本信息包括所述缓存数据的业务标识和时间戳信息。
[0029]另外,根据本专利技术实施例的另一个方面,提供了一种更新缓存数据的装置,包括:
[0030]注册模块,用于接收更新请求,根据所述更新请求生成将缓存数据更新至各个集群的父任务;其中,所述更新请求携带所述各个集群的信息和所述缓存数据的业务标识,所述父任务包括多个子任务;
[0031]更新模块,用于获取所述缓存数据,将所述缓存数据分别更新到所述各个子任务对应的集群中;
[0032]切换模块,用于分别向所述各个集群发送版本切换请求,所述版本切换请求携带所述缓存数据的版本信息。
[0033]可选地,所述注册模块还用于:
[0034]根据所述更新请求生成任务注册表和将缓存数据更新至各个集群的父任务;
[0035]将所述父任务及其对应的子任务注册到所述任务注册表中;
[0036]其中,所述子任务的数量与所述集群的数量相同,所述任务注册表中保存有所述父任务的信息、所述父任务对应的各个子任务的信息、所述各个子任务的任务状态和所述
缓存数据的版本信息。
[0037]可选地,所述更新模块还用于:
[0038]对于每一个子任务,获取所述缓存数据,将所述缓存数据更新到所述子任务对应的集群中,并将所述任务注册表中所述子任务的任务状态更新为成功。
[0039]可选地,所述切换模块还用于:
[0040]扫描所述任务注册表中各个子任务的任务状态,判断所述各个子任务的任务状态是否均为成功;
[0041]若是,则分别向所述各个集群发送版本切换请求;
[0042]若否,则根据任务状态为失败的子任务构造异常任务,并将所述异常任务保存到异常任务表中;其中,所述异常任务表中保存有所述子任务的信息、重试次数、重试策略、任务状态和任务元数据。
[0043]可选地,还包括:
[0044]恢复模块,用于将所述异常任务保存到异常任务表中之后,扫描所述异常任务表,根据恢复策略重新执行所述异常任务表中的异常任务;
[0045]将所述任务注册表中所述异常任务对应的子任务的任务状态更新为成功。
[0046]可选地,所述任务元数据包括任务名称、执行任务的可重用组件名称和执行任务的方法;
[0047]所述恢复模块还用于:
[0048]扫描所述本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种更新缓存数据的方法,其特征在于,包括:接收更新请求,根据所述更新请求生成将缓存数据更新至各个集群的父任务;其中,所述更新请求携带所述各个集群的信息和所述缓存数据的业务标识,所述父任务包括多个子任务;获取所述缓存数据,将所述缓存数据分别更新到所述各个子任务对应的集群中;分别向所述各个集群发送版本切换请求,所述版本切换请求携带所述缓存数据的版本信息。2.根据权利要求1所述的方法,其特征在于,根据所述更新请求生成将缓存数据更新至各个集群的父任务,包括:根据所述更新请求生成任务注册表和将缓存数据更新至各个集群的父任务;将所述父任务及其对应的子任务注册到所述任务注册表中;其中,所述子任务的数量与所述集群的数量相同,所述任务注册表中保存有所述父任务的信息、所述父任务对应的各个子任务的信息、所述各个子任务的任务状态和所述缓存数据的版本信息。3.根据权利要求2所述的方法,其特征在于,获取所述缓存数据,将所述缓存数据分别更新到所述各个子任务对应的集群中,包括:对于每一个子任务,获取所述缓存数据,将所述缓存数据更新到所述子任务对应的集群中,并将所述任务注册表中所述子任务的任务状态更新为成功。4.根据权利要求3所述的方法,其特征在于,分别向所述各个集群发送版本切换请求,包括:扫描所述任务注册表中各个子任务的任务状态,判断所述各个子任务的任务状态是否均为成功;若是,则分别向所述各个集群发送版本切换请求;若否,则根据任务状态为失败的子任务构造异常任务,并将所述异常任务保存到异常任务表中;其中,所述异常任务表中保存有所述子任务的信息、重试次数、重试策略、任务状态和任务元数据。5.根据权利要求4...

【专利技术属性】
技术研发人员:刘吓凤
申请(专利权)人:北京京东振世信息技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1