首页 / 专利库 / 商业 / 回执 / 数据同步方法、装置、服务器及存储介质

数据同步方法、装置、服务器及存储介质

阅读:388发布:2020-05-11

专利汇可以提供数据同步方法、装置、服务器及存储介质专利检索,专利查询,专利分析的服务。并且本 申请 实施例 公开了一种数据同步方法、装置、 服务器 及存储介质,属于数据存储技术领域。该方法包括:获取对第一服务器中的缓存数据的更改指令;通过拦截组件拦截所述更改指令,并将所述更改指令对应的更改消息添加至消息队列;根据所述更改指令更改所述第一服务器中的缓存数据;向第二服务器发送所述消息队列中的更改消息,所述更改消息用于所述第二服务器同步更改所述第二服务器中的缓存数据。本申请实施例可以解决从服务器的缓存数据更改时,主服务器无法同步更改缓存数据的问题;由于无论第一服务器是从服务器还是主服务器,都可以实现缓存数据与第二服务器中的缓存数据保持一致,而不受服务器类型的限制,可以提高缓存数据的一致性。,下面是数据同步方法、装置、服务器及存储介质专利的具体信息内容。

1.一种数据同步方法,其特征在于,所述方法包括:
获取对第一服务器中的缓存数据的更改指令;
通过拦截组件拦截所述更改指令,并将所述更改指令对应的更改消息添加至消息队列,其中,所述拦截组件是基于面向切面编程AOP实现并安装在应用服务中的软件开发工具包SDK,每个第二服务器对应一个消息队列,且所述消息队列位于所述第一服务器,所述更改指令的格式与所述消息队列允许的消息的格式不同,且所述更改消息是所述拦截组件将所述更改指令的格式修改为消息的格式后得到的消息;
根据所述更改指令更改所述第一服务器中的缓存数据;
向第二服务器发送所述消息队列中的所述更改消息,所述更改消息用于所述第二服务器更改所述第二服务器中的缓存数据,所述消息队列与所述第二服务器对应,且所述第二服务器中的缓存同步组件用于监听所述第一服务器中所述第二服务器对应的所述消息队列;
每隔检测时长检测与所述第二服务器之间的通信连接是否中断;
当未接收到所述第二服务器对所述更改消息的接收回执,且所述第一服务器与所述第二服务器之间的通信连接中断时,将所述更改消息保留在所述消息队列中;
当所述第一服务器与所述第二服务器之间的通信连接恢复时,向所述第二服务器发送保留在所述消息队列中的所述更改消息。
2.根据权利要求1所述的方法,其特征在于,所述向所述第二服务器发送所述消息队列中的所述更改消息之后,还包括:
在接收到所述第二服务器对所述更改消息的接收回执时,在所述消息队列中删除所述更改消息。
3.根据权利要求1所述的方法,其特征在于,所述向所述第二服务器发送所述消息队列中的更改消息,包括:
对于每个第二服务器,确定所述第二服务器对应的消息队列;
将所述消息队列中的所述更改消息发送至所述第二服务器;或者,将所述消息队列中的所述更改消息和至少一个其它更改消息发送至所述第二服务器。
4.一种数据同步方法,其特征在于,所述方法用于第二服务器,所述方法包括:
通过缓存同步组件监听第一服务器中所述第二服务器对应的消息队列,并接收所述第一服务器发送的更改消息,所述更改消息是所述第一服务器中的拦截组件发送的;所述拦截组件是基于面向切面编程AOP实现并安装在应用服务中的软件开发工具包SDK,所述拦截组件用于拦截所述第一服务器获取到的对缓存数据的更改指令,并将根据所述更改指令生成的所述更改消息添加至位于所述第一服务器的消息队列,所述更改指令的格式与所述消息队列允许的消息的格式不同,且所述更改消息是所述拦截组件将所述更改指令的格式修改为消息的格式后得到的消息;所述第一服务器还用于每隔检测时长检测与所述第二服务器之间的通信连接是否中断,在未接收到所述第二服务器对所述更改消息的接收回执,且所述第一服务器与所述第二服务器之间的通信连接中断时,将所述更改消息保留在所述消息队列中,并在所述第一服务器与所述第二服务器之间的通信连接恢复时,向所述第二服务器发送保留在所述消息队列中的所述更改消息;
通过所述缓存同步组件根据所述更改消息对所述缓存数据进行更改。
5.根据权利要求4所述的方法,其特征在于,所述通过缓存同步组件接收第一服务器发送的更改消息之后,还包括:
通过所述缓存同步组件向所述第一服务器发送对所述更改消息的接收回执,所述接收回执用于指示已成功接收所述更改消息。
6.根据权利要求4所述的方法,其特征在于,所述通过缓存同步组件接收第一服务器发送的更改消息之前,还包括:
通过所述缓存同步组件向所述第一服务器发送订阅请求,所述订阅请求用于请求所述第一服务器发送消息队列中的更改消息。
7.一种数据同步装置,其特征在于,所述装置包括:
指令获取单元,用于获取对第一服务器中的缓存数据的更改指令;
指令拦截单元,用于通过拦截组件拦截所述更改指令,并将所述更改指令对应的更改消息添加至消息队列,其中,所述拦截组件是基于面向切面编程AOP实现并安装在应用服务中的软件开发工具包SDK,每个第二服务器对应一个消息队列,且所述消息队列位于所述第一服务器,所述更改指令的格式与所述消息队列允许的消息的格式不同,且所述更改消息是所述拦截组件将所述更改指令的格式修改为消息的格式后得到的消息;
数据更改单元,用于根据所述更改指令更改所述第一服务器中的缓存数据;
消息发送单元,用于向第二服务器发送所述消息队列中的所述更改消息,所述更改消息用于所述第二服务器更改所述第二服务器中的缓存数据,所述消息队列与所述第二服务器对应,且所述第二服务器中的缓存同步组件用于监听所述第一服务器中所述第二服务器对应的所述消息队列;
用于每隔检测时长检测与所述第二服务器之间的通信连接是否中断的功能单元;
用于当未接收到所述第二服务器对所述更改消息的接收回执,且所述第一服务器与所述第二服务器之间的通信连接中断时,将所述更改消息保留在所述消息队列中的功能单元;
消息重传单元,用于当所述第一服务器与所述第二服务器之间的通信连接恢复时,向所述第二服务器发送保留在所述消息队列中的所述更改消息。
8.一种数据同步装置,其特征在于,所述装置包括:
消息接收单元,用于通过缓存同步组件监听第一服务器中第二服务器对应的消息队列,并接收所述第一服务器发送的更改消息,所述更改消息是所述第一服务器中的拦截组件发送的,所述拦截组件是基于面向切面编程AOP实现并安装在应用服务中的软件开发工具包SDK,所述拦截组件用于拦截所述第一服务器接收到的对缓存数据的更改指令,并将根据所述更改指令生成的所述更改消息添加至位于所述第一服务器的消息队列,所述更改指令的格式与所述消息队列允许的消息的格式不同,且所述更改消息是所述拦截组件将所述更改指令的格式修改为消息的格式后得到的消息;所述第一服务器还用于每隔检测时长检测与所述第二服务器之间的通信连接是否中断,在未接收到所述第二服务器对所述更改消息的接收回执,且所述第一服务器与所述第二服务器之间的通信连接中断时,将所述更改消息保留在所述消息队列中,并在所述第一服务器与所述第二服务器之间的通信连接恢复时,向所述第二服务器发送保留在所述消息队列中的所述更改消接收第一服务器发送的更改消息;
数据同步单元,用于通过所述缓存同步组件根据所述更改消息对所述缓存数据进行更改。
9.一种服务器,其特征在于,所述服务器包括处理器、与所述处理器相连的存储器,以及存储在所述存储器上的程序指令,所述处理器执行所述程序指令时实现如权利要求1至3任一所述的数据同步方法;或者,如权利要求4至6任一所述的数据同步方法。
10.一种计算机可读存储介质,其特征在于,其上存储有程序指令,所述程序指令被处理器执行时实现如权利要求1至3任一所述的数据同步方法;或者,如权利要求4至6任一所述的数据同步方法。

说明书全文

数据同步方法、装置、服务器及存储介质

技术领域

[0001] 本申请实施例涉及数据存储技术领域,特别涉及一种数据同步方法、装置、服务器及存储介质。

背景技术

[0002] 分布式服务是指由多个服务器协同工作完成某一业务的服务系统。在分布式服务系统中,为了保证同一终端能够从不同的服务器中访问到该终端对应的缓存数据,不同的服务器中的缓存数据需要保持同步。
[0003] 以同步远程数据服务(Remote Dictionary Serve,Redis)中的缓存数据为例,分布式服务系统包括主服务器和从服务器,在同步Redis缓存数据时,从服务器只能同步主服务器中的Redis缓存数据,而主服务器不能同步从服务器中的Redis缓存数据。
[0004] 由于从服务器只能单向复制主服务器的缓存数据,此时,一旦从服务器中的缓存数据发生变化,主服务器中的缓存数据无法同步更新,会导致缓存数据不一致的问题。发明内容
[0005] 本申请实施例提供的数据同步方法、装置、服务器及存储介质,可以解决同步缓存数据时,从服务器只能单向地同步主服务器中的缓存数据,而主服务器不能同步从服务器中的缓存数据,导致从服务器中的缓存数据与主服务器中的缓存数据不一致的问题。所述技术方案如下:
[0006] 第一方面,提供了一种数据同步方法,所述方法包括:
[0007] 获取对第一服务器中的缓存数据的更改指令;
[0008] 通过拦截组件拦截所述更改指令,并将所述更改指令对应的更改消息添加至消息队列;
[0009] 根据所述更改指令更改所述第一服务器中的缓存数据;
[0010] 向第二服务器发送所述消息队列中的所述更改消息,所述更改消息用于所述第二服务器更改所述第二服务器中的缓存数据。
[0011] 第二方面,提供了一种数据同步方法,所述方法包括:
[0012] 通过缓存同步组件接收第一服务器发送的更改消息,所述更改消息是所述第一服务器中的拦截组件发送的,所述拦截组件用于拦截所述第一服务器接收到的对缓存数据的更改指令,并根据所述更改指令生成所述更改消息;
[0013] 通过所述缓存同步组件根据所述更改消息对所述缓存数据进行更改。
[0014] 第三方面,提供了一种数据同步装置,所述装置包括:
[0015] 指令获取单元,用于获取对第一服务器中的缓存数据的更改指令;
[0016] 指令拦截单元,用于拦截所述更改指令,并将所述更改指令对应的更改消息添加至消息队列;
[0017] 数据更改单元,用于根据所述更改指令更改所述第一服务器中的缓存数据;
[0018] 消息发送单元,用于向第二服务器发送所述消息队列中的所述更改消息,所述更改消息用于所述第二服务器更改所述第二服务器中的缓存数据。
[0019] 第四方面,提供了一种数据同步装置,所述装置包括:
[0020] 消息接收单元,用于接收第一服务器发送的更改消息,所述更改消息是所述第一服务器中的拦截组件发送的,所述拦截组件用于拦截所述第一服务器接收到的对缓存数据的更改指令,并根据所述更改指令生成所述更改消息;
[0021] 数据同步单元,用于根据所述更改消息对所述缓存数据进行更改。
[0022] 第五方面,提供了一种服务器,所述服务器包括处理器、与所述处理器相连的存储器,以及存储在所述存储器上的程序指令,所述处理器执行所述程序指令时实现第一方面提供的数据同步方法;或者,实现第二方面提供的数据同步方法。
[0023] 第六方面,一种计算机可读介质,其上存储有程序指令,所述程序指令被处理器执行时实现第一方面提供的数据同步方法;或者,实现第二方面提供的数据同步方法。
[0024] 本申请实施例提供的技术方案带来的有益效果包括:
[0025] 通过在第一服务器中安装拦截组件来拦截对缓存数据的更改指令,并将该更改指令对应的更改消息发送至消息队列中;然后第一服务器将该消息队列中的更改消息发送至第二服务器,从而实现第二服务器中缓存数据与第一服务器中的缓存数据保持一致;可以解决同步Redis缓存数据时,若从服务器中的缓存数据更改,主服务器中的缓存数据无法与从服务器中的缓存数据保持一致的问题;由于无论第一服务器是从服务器还是主服务器,都可以实现缓存数据与第二服务器中的缓存数据保持一致,而不受服务器类型的限制,因此,在第一服务器为从服务器,第二服务器为主服务器时,可以实现从服务器中的缓存数据同步至主服务器中,可以提高不同服务器之间的缓存数据的一致性,降低同步缓存数据的复杂度。附图说明
[0026] 为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0027] 图1是本申请一个实施例提供的数据同步系统的结构示意图;
[0028] 图2是本申请一个示例性实施例提供的数据同步方法的流程图
[0029] 图3是本申请一个示例性实施例提供的数据同步方法的流程图;
[0030] 图4是本申请一个示例性实施例提供的数据同步方法的流程图;
[0031] 图5是本申请另一个示例性实施例提供的数据同步方法的流程图;
[0032] 图6是本申请一个实施例提供的数据同步装置的结构方框图
[0033] 图7是本申请一个实施例提供的数据同步装置的结构方框图;
[0034] 图8是本申请一个实施例提供的服务器的结构方框图。

具体实施方式

[0035] 为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
[0036] 首先,对本申请实施例涉及的若干名词进行介绍。
[0037] 缓存数据:是指为了提高数据访问速度而直接缓存在缓存内存中的数据。缓存数据的访问频率通常较高,发生变化的速度较快。
[0038] 可选地,本申请实施例中,缓存数据可以是远程数据服务(Remote Dictionary Serve,Redis)中的缓存数据,也可以是分布式的高速缓存系统Memcache中的缓存数据,本申请实施例中不做限定。
[0039] 图1是本申请的一个示例性实施例示出的数据同步系统的结构示意图,该系统包括第一服务器110和第二服务器120。
[0040] 第一服务器110为缓存数据发生更改的服务器。
[0041] 可选地,第一服务器110中安装有拦截组件111。拦截组件111用于拦截对第一服务器110中的缓存数据的更改指令,并将该更改指令对应的更改消息添加到至少一个消息队列112中。
[0042] 可选地,本申请中,将具有拦截更改指令功能的组件称为拦截组件111。当然,该拦截组件111也可以称为其它名称,本实施例对此不作限定。在实际实现时,与拦截组件111具有相同的功能的软件硬件或者软硬件结合的组件都在本申请所描述的拦截组件111的保护范围内。
[0043] 可选地,更改指令对应的更改消息是指:将更改指令的格式修改为消息的格式后得到的消息。可选地,第一服务器获取到的更改指令的格式与消息队列允许的消息的格式的不同,因此,拦截组件拦截到更改指令之后,需要将该更改指令的格式修改为消息的格式,得到该更改指令对应的更改消息,才能发送至消息队列。
[0044] 可选地,消息队列112位于第一服务器110中,也可以位于与第一服务器110相独立的其它服务器中,本实施例对此不作限定。本申请中,以消息队列112位于第一服务器110中为例进行说明。
[0045] 可选地,第一服务器110接收到更改指令后,根据该更改指令对缓存数据进行更改。可选地,更改指令包括但不限于:添加指令、删除指令和修改指令中的至少一种。
[0046] 可选地,第一服务器110和第二服务器120通过无线网络或有线网络相连。
[0047] 第二服务器120为订阅了第一服务器110中的更改消息的服务器。第二服务器120和第一服务器110提供的服务完全相同或者部分相同。
[0048] 第二服务器120中安装有缓存同步组件121,缓存同步组件121用于监听第一服务器中的更改消息,并根据该更改消息对第二服务器120中的缓存数据进行同步更改。
[0049] 可选地,本申请中,将具有监听更改消息的功能的组件称为缓存同步组件121。当然,该缓存同步组件121也可以称为其它名称,本实施例对此不作限定。在实际实现时,与缓存同步组件121具有相同的功能的软件、硬件或者软硬件结合的组件都在本申请所描述的缓存同步组件121的保护范围内。
[0050] 可选地,缓存同步组件121通过第一服务器110和第二服务器120之间的通信连接向第一服务器110发送订阅请求;相应地,第一服务器110接收到订阅请求后,建立与第二服务器120之间的订阅关系。然后,第一服务器110在消息队列112不为空时,将消息队列112中的更改消息发送至缓存同步组件121;缓存同步组件121根据该更改消息对缓存数据进行同步更改。
[0051] 可选地,当第二服务器120的数量为至少两个时,每个第二服务器120对应一个消息队列112。
[0052] 可选地,第一服务器110和第二服务器120部署于不同的机房中。比如:第一服务器110部署于机房1中,存在两个第二服务器120分别部署于机房2和机房3中。
[0053] 可选地,第一服务器110中安装有缓存同步组件113,第二服务器120中安装有拦截组件122。其中,拦截组件122用于拦截对第二服务器120中的缓存数据的更改指令,并将该更改指令对应的更改消息添加至消息队列123中。
[0054] 缓存同步组件113用于监听消息队列123中的更改消息,并根据该更改消息对缓存数据进行同步更改。
[0055] 可选地,上述第一服务器110的数量可以为至少一个,第二服务器120的数量也可以为至少一个,本实施例对此不作限定。
[0056] 图2是本申请的一个示例性实施例示出的数据同步方法的流程图。本实施例以该数据同步方法应用于图1所示的数据同步系统中的第一服务器110为例,该第一服务器110为缓存数据发生更改的服务器。该数据同步方法至少包括以下几个步骤。
[0057] 步骤201,获取对第一服务器中的缓存数据的更改指令。
[0058] 步骤202,通过拦截组件拦截更改指令,并将更改指令对应的更改消息添加至消息队列。
[0059] 步骤203,根据更改指令更改第一服务器中的缓存数据。
[0060] 可选地,本步骤可以在步骤202之前执行;或者,也可以在步骤202之后执行;或者,也可以与步骤202同时执行,本实施例对于步骤202和步骤203的执行顺序不作限定。
[0061] 步骤204,向第二服务器发送消息队列中的更改消息,该更改消息用于第二服务器更改该第二服务器中的缓存数据。
[0062] 可选地,第二服务器为与第一服务器之间存在订阅关系的服务器,第一服务器通过与第二服务器之间的订阅关系,将消息队列中的更改消息发送至第二服务器。
[0063] 可选地,步骤204可以在步骤203之后执行;或者,也可以在步骤203之前执行;或者,还可以与步骤203同时执行,本实施例对于步骤204和步骤203的执行顺序不作限定。
[0064] 综上所述,本实施例提供的数据同步方法,通过在第一服务器中安装拦截组件来拦截对缓存数据的更改指令,并将该更改指令对应的更改消息发送至消息队列中;然后第一服务器将该消息队列中的更改消息发送至第二服务器,从而实现第二服务器中缓存数据与第一服务器中的缓存数据保持一致;可以解决同步Redis缓存数据时,若从服务器中的缓存数据更改,主服务器中的缓存数据无法与从服务器中的缓存数据保持一致的问题;由于无论第一服务器是从服务器还是主服务器,都可以实现缓存数据与第二服务器中的缓存数据保持一致,而不受服务器类型的限制,因此,在第一服务器为从服务器,第二服务器为主服务器时,可以实现从服务器中的缓存数据同步至主服务器中,可以提高不同服务器之间的缓存数据的一致性,降低同步缓存数据的复杂度。
[0065] 图3是本申请的一个示例性实施例示出的数据同步方法的流程图。本实施例以该数据同步方法应用于图1所示的数据同步系统中的第二服务器120为例,该第二服务器120为同步更新第一服务器110中的缓存数据的服务器。该数据同步方法至少包括以下几个步骤。
[0066] 步骤301,通过缓存同步组件接收第一服务器发送的更改消息。
[0067] 可选地,更改消息是第一服务器中的拦截组件发送的;拦截组件用于拦截第一服务器获取到的对缓存数据的更改指令,并根据更改指令生成更改消息。
[0068] 可选地,第二服务器与第一服务器之间预先建立有订阅关系,通过该订阅关系,第二服务器能够接收到第一服务器发送的更改消息。
[0069] 步骤302,通过缓存同步组件根据更改消息对缓存数据进行更改。
[0070] 综上所述,本实施例提供的数据同步方法,通过在第二服务器中安装缓存同步组件,使得第二服务器可以订阅第一服务器中的更改消息,从而实现第二服务器中的缓存数据与第一服务器中的缓存数据的同步;可以解决同步Redis缓存数据时,若从服务器中的缓存数据更改,主服务器中的缓存数据无法与从服务器中的缓存数据保持一致的问题;由于无论第一服务器是从服务器还是主服务器,都可以实现缓存数据与第二服务器中的缓存数据保持一致,而不受服务器类型的限制,因此,在第一服务器为从服务器,第二服务器为主服务器时,可以实现从服务器中的缓存数据同步至主服务器中,可以提高不同服务器之间的缓存数据的一致性,降低同步缓存数据的复杂度。
[0071] 图4是本申请的一个示例性实施例示出的数据同步方法的流程图。本实施例以该数据同步方法应用于图1所示的数据同步系统中为例。该数据同步方法至少包括以下几个步骤。
[0072] 步骤401,第一服务器获取对第一服务器中的缓存数据的更改指令。
[0073] 可选地,第一服务器通过本地安装的应用服务获取更改指令。
[0074] 可选地,更改指令可以是与第一服务器中的应用服务建立有通信连接的客户端发送的,该应用服务用于为该客户端提供后台服务;或者,也可以是第一服务器中的应用服务自动生成的。更改指令包括但不限于:添加指令、删除指令和修改指令中的至少一种。
[0075] 可选地,与第一服务器建立有通信连接的客户端与第一服务器之间的距离小于该客户端与第二服务器之间的距离。即,客户端在与服务器连接时可以选择连接到距离较近的第一服务器上。这样,可以减少客户端与服务器之间的通信距离,提高通信效率。
[0076] 比如:第一服务器设置在北京、第二服务器设置在上海。处于北京的客户端可以自动地连接到第一服务器。当客户端从北京迁移至上海之后,该客户端可以自动地连接到第二服务器。为了保证客户端能够在第二服务器上能够访问到在第一服务器中缓存的数据,需要对第一服务器和第二服务器中的缓存数据进行数据同步。
[0077] 步骤402,第一服务器通过拦截组件拦截更改指令,并将更改指令对应的更改消息添加至消息队列。
[0078] 可选地,拦截组件拦截到更改指令后,根据该更改指令生成更改消息;将该更改消息添加至消息队列。
[0079] 可选地,更改指令对应的更改消息是指:将更改指令的格式修改为消息的格式后得到的消息。可选地,第一服务器获取到的更改指令的格式与消息队列允许的消息的格式的不同,因此,拦截组件拦截到更改指令之后,需要将该更改指令的格式修改为消息的格式,得到该更改指令对应的更改消息,才能发送至消息队列。
[0080] 可选地,消息队列的数量为至少一个,拦截组件将更改消息发送至每个消息队列中。
[0081] 可选地,更改消息包括数据标识和/或更改类型。数据标识用于指示被更改的缓存数据。可选地,数据标识包括但不限于:缓存数据的哈希值和缓存数据的缓存地址中的至少一种。更改类型为添加、删除和修改中的至少一种,该更改类型是根据更改指令确定的。
[0082] 可选地,在本步骤之前,第一服务器在应用服务中安装拦截组件,该拦截组件为基于面向切面编程(Aspect Oriented Programming,AOP)实现的组件。示意性地,拦截组件为基于AOP实现的软件开发工具包(Software Development Kit,SDK)。
[0083] 其中,AOP可以在不改变程序源码的情况下为应用服务添加额外的功能,且可以降低业务逻辑之间的耦合度。本实施例中,基于AOP的拦截组件可以动态代理应用服务中的某一环节的业务逻辑,降低业务逻辑之间的耦合度,降低开发拦截组件的难度。
[0084] 可选地,消息队列用于接收拦截组件发送的更改消息,该消息队列按照接收更改消息的先后顺序对更改消息排序,即,接收顺序在前的更改消息排序在前,接收顺序在后的更改消息排序在后。
[0085] 可选地,消息队列为RabbitMQ。RabbitMQ是一个开源的高级消息队列协议(Advanced Message Queuing Protocol,AMQP)实现,RabbitMQ的易用性和扩展性较高。当然,消息队列也可以为其它类型的消息队列,本实施例对此不作限定。
[0086] 步骤403,第一服务器根据更改指令更改该第一服务器中的缓存数据。
[0087] 可选地,第一服务器中的应用服务根据更改指令更改第一服务器中的缓存数据。
[0088] 可选地,本步骤可以在步骤402之前执行;也可以在步骤402之后执行;还可以与步骤402同时执行,本实施不对步骤403和步骤402之间的执行顺序作限定。
[0089] 步骤404,第二服务器通过缓存同步组件向第一服务器发送订阅请求。
[0090] 订阅请求用于请求第一服务器发送消息队列中的更改消息,该更改消息是第一服务器中的拦截组件发送的,该拦截组件用于拦截第一服务器接收到的对缓存数据的更改指令,并根据更改指令生成更改消息。
[0091] 可选地,订阅请求触发第一服务器建立与第二服务器之间的订阅关系。
[0092] 可选地,安装在第二服务器中的缓存同步组件订阅消息队列中的更改消息。
[0093] 可选地,步骤404可以在步骤401-403之前执行;或者,也可以在步骤401-403之后执行;或者,还可以与步骤401-403同时执行,本实施例对步骤404和步骤401-403之间的执行顺序不作限定。
[0094] 步骤405,第一服务器接收第二服务器对消息队列的订阅请求。
[0095] 可选地,第一服务器接收到订阅请求之后,建立与第二服务器之间的订阅关系。
[0096] 步骤406,第一服务器向第二服务器发送消息队列中的更改消息,该更改消息用于第二服务器对缓存数据进行更改。
[0097] 可选地,第一服务器通过与第二服务器之间的订阅关系,向第二服务器发送消息队列中的更改消息。
[0098] 示意性地,第一服务器可以在消息队列不为空时,每隔一定时长向第二服务器发送消息队列中的更改消息。
[0099] 可选地,当第二服务器的数量为一个时,第一服务器中消息队列的数量至少为一个。第一服务器按照消息队列中更改消息的接收顺序,向第二服务器发送该消息队列中的前n个更改消息。n为正整数。本实施不对n的数值作限定,示意性地,n的值为1。
[0100] 可选地,当第二服务器的数量为至少两个时,第一服务器中的消息队列包括的至少两个,每个第二服务器中的缓存同步组件对应监控第一服务器中的一个消息队列。此时,第一服务器接收到订阅请求之后,对于每个第二服务器,确定该第二服务器对应的消息队列;将该消息队列中的前n个更改消息发送至该第二服务器。
[0101] 可选地,当n的取值为1时,第一服务器将消息队列中的第一条消息发送第二服务器;当n的取值为大于1的数值时,第一服务器将消息队列中的第一条消息和其它更改消息发送至第二服务器。
[0102] 步骤407,第二服务器通过缓存同步组件接收第一服务器发送的更改消息。
[0103] 步骤408,第二服务器通过缓存同步组件根据更改消息对该第二服务器中的缓存数据进行更改。
[0104] 可选地,缓存同步组件根据更改消息对第二服务器中的缓存数据进行更改是指:将第二服务器中的缓存数据更改至与第一服务器中的缓存数据相同。
[0105] 步骤409,第二服务器通过缓存同步组件向第一服务器发送对更改消息的接收回执
[0106] 对更改消息的接收回执用于指示第二服务器成功接收到该更改消息。
[0107] 可选地,本步骤可以在步骤408之前执行;或者,也可以在步骤408之后执行;或者,也可以与步骤408同时执行,本实施对步骤408和步骤409之间的执行顺序不作限定。
[0108] 步骤410,第一服务器接收对更改消息的接收回执,根据该接收回执在消息队列中删除更改消息。
[0109] 综上所述,本实施例提供的数据同步方法,通过在第一服务器中安装拦截组件来拦截对缓存数据的更改指令,并将该更改指令对应的更改消息发送至消息队列中;然后第一服务器将该消息队列中的更改消息发送至第二服务器,从而实现第二服务器中缓存数据与第一服务器中的缓存数据保持一致;可以解决同步Redis缓存数据时,若从服务器中的缓存数据更改,主服务器中的缓存数据无法与从服务器中的缓存数据保持一致的问题;由于无论第一服务器是从服务器还是主服务器,都可以实现缓存数据与第二服务器中的缓存数据保持一致,而不受服务器类型的限制,因此,在第一服务器为从服务器,第二服务器为主服务器时,可以实现从服务器中的缓存数据同步至主服务器中,可以提高不同服务器之间的缓存数据的一致性,降低同步缓存数据的复杂度。
[0110] 另外,通过基于AOP实现拦截组件,可以使得拦截组件动态代理应用服务中的某一环节的业务逻辑,降低业务逻辑之间的耦合度,降低开发拦截组件的难度。
[0111] 可选地,步骤401-403、405和410可单独实现为第一服务器侧的方法实施例,步骤404、406-409可单独实现为第二服务器侧的方法实施例,本实施例对此不作限定。
[0112] 可选地,本实施仅以第二服务器直接向第一服务器发送订阅请求,来建立第一服务器与第二服务器之间的订阅关系为例进行说明,在实际实现时,也可以由第二服务器通过至少一个其它服务器向第一服务器发送订阅请求,来建立第一服务器与第二服务器之间的订阅关系。
[0113] 可选地,在步骤406之后,第一服务器与第二服务器之间通信连接可能中断,此时,第二服务器可能接收不到第一服务器发送的更改消息,为了保证第二服务器在通信连接恢复时能够继续接收该更改消息,第一服务器需要在消息队列中保留该更改消息。
[0114] 图5是本申请的另一个示例性实施例示出的数据同步方法的流程图。本实施例以该数据同步方法应用于图1所示的数据同步系统中为例。基于图4所示的实施例,在步骤406之后,该方法还包括以下几个步骤。
[0115] 步骤501,在第一服务器与第二服务器之间的通信连接在中断之后恢复时,第一服务器再次向第二服务器发送更改消息,该更改消息是第一服务器在未接收到第二服务器对更改消息的接收回执,且第一服务器与第二服务器之间的通信连接中断时保留在消息队列中的;执行步骤407。
[0116] 可选地,第一服务器每隔检测时长检测与第二服务器之间的通信连接是否中断,在检测出通信连接中断且未接收到第二服务器对更改消息的接收回执时,此时,第二服务器可能接收更改消息失败。因此,为了保证第二服务器能够接收到该更改消息,第一服务器发送更改消息之后,暂时不将该更改消息删除,而是在消息队列中保留该更改消息。
[0117] 综上所述,本实施例提供的数据同步方法,通过在未接收到第二服务器对更改消息的接收回执,且第一服务器与第二服务器之间的通信连接中断时,第一服务器在消息队列中保留更改消息;在第一服务器与第二服务器之间的通信连接恢复时,第一服务器再次向第二服务器发送更改消息;保证了第二服务器能够接收到该更改消息,从而根据该更改消息进行缓存数据的同步,可以提高缓存数据同步的可靠性。
[0118] 可选地,若第一服务器在发送更改消息之后的时长达到时长阈值时,该第一服务器还未接收到对该更改消息的接收回执,说明第一服务器发送失败;或者,第二服务器接收失败,此时,第一服务器再次向第二服务器发送更改消息,直至接收到对该更改消息的接收回执时将该更改消息删除。
[0119] 本实施例中,通过设置时长阈值,在该时长阈值内未接收到接收回执时再次向第二服务器发送更改消息,可以保证第二服务器能够接收到该更改消息,从而根据该更改消息进行缓存数据的同步,可以提高缓存数据同步的可靠性。
[0120] 需要补充说明的是,本申请实施例仅以第一服务器包括拦截组件和消息队列,第二服务器包括缓存同步组件为例进行说明,在实际实现时,第一服务器也可以包括缓存同步组件,第二服务器也可以包括拦截组件和消息队列。
[0121] 下述为本申请装置实施例,可以用于执行本申请方法实施例。对于本申请装置实施例中未披露的细节,请参照本申请方法实施例。
[0122] 请参考图6,其示出了本申请一个实施例提供的数据同步装置的结构方框图,该数据同步装置可通过软件、硬件或者两者的结合实现成为第一服务器的部分或者全部。该装置可以包括:指令获取单元610、指令拦截单元620、数据更改单元630和消息发送单元640。
[0123] 指令获取单元610,用于获取对第一服务器中的缓存数据的更改指令;
[0124] 指令拦截单元620,用于拦截所述更改指令,并将所述更改指令对应的更改消息添加至消息队列;
[0125] 数据更改单元630,用于根据所述更改指令更改所述第一服务器中的缓存数据;
[0126] 消息发送单元640,用于向第二服务器发送所述消息队列中的更改消息,所述更改消息用于所述第二服务器更改所述第二服务器中的缓存数据。
[0127] 可选地,所述装置还包括:组件安装单元。
[0128] 组件安装单元,用于在所述第一服务器的应用服务中安装所述拦截组件,所述拦截组件是基于AOP实现的。
[0129] 可选地,在未接收到所述第二服务器对所述更改消息的接收回执,且所述第一服务器与所述第二服务器之间的通信连接中断时,所述更改消息保留在消息队列中;
[0130] 所述装置还包括:消息重传单元。
[0131] 消息重传单元,用于在所述第一服务器与所述第二服务器之间的通信连接恢复时,再次向所述第二服务器发送所述保留在消息队列中的更改消息。
[0132] 可选地,所述装置还包括:消息删除单元。
[0133] 消息删除单元,用于在接收到所述第二服务器对所述更改消息的接收回执时,在所述消息队列中删除所述更改消息。
[0134] 可选地,所述第二服务器的数量为至少两个,每个第二服务器对应一个消息队列;所述消息发送单元640,用于:
[0135] 对于每个第二服务器,确定所述第二服务器对应的消息队列;
[0136] 将所述消息队列中的所述更改消息发送至所述第二服务器;或者,将所述消息队列中的所述更改消息和至少一个其它更改消息发送至所述第二服务器。
[0137] 相关细节参考上述第一服务器侧的方法实施例。
[0138] 请参考图7,其示出了本申请实施例一个实施例提供的数据同步装置的结构方框图,该数据同步装置可通过软件、硬件或者两者的结合实现成为第一服务器的部分或者全部。该装置可以包括:消息接收单元710和数据同步单元720。
[0139] 消息接收单元710,用于接收第一服务器发送的更改消息,所述更改消息是所述第一服务器中的拦截组件发送的,所述拦截组件用于拦截所述第一服务器接收到的对缓存数据的更改指令,并根据所述更改指令生成所述更改消息;
[0140] 数据同步单元720,用于根据所述更改消息对所述缓存数据进行同步更改。
[0141] 可选地,所述装置还包括:回执发送单元。
[0142] 回执发送单元,用于向所述第一服务器发送对所述更改消息的接收回执,所述接收回执用于指示已成功接收所述更改消息。
[0143] 可选地,所述装置还包括,请求发送单元。
[0144] 请求发送单元,用于向所述第一服务器发送订阅请求,所述订阅请求用于请求所述第一服务器发送消息队列中的更改消息。
[0145] 相关细节参考上述第二服务器侧的方法实施例。
[0146] 本申请实施例还提供一种计算机可读介质,其上存储有程序指令,程序指令被处理器执行时实现上述各个方法实施例提供的数据同步方法。
[0147] 本申请实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述各个方法实施例提供的数据同步方法。
[0148] 参考图8,其示出了本申请实施例一个示例性实施例提供的服务器的结构方框图。本申请实施例中的服务器可以包括一个或多个如下部件:处理器810和存储器820。
[0149] 处理器810可以包括一个或者多个处理核心。处理器810利用各种接口和线路连接整个服务器内的各个部分,通过运行或执行存储在存储器820内的指令、程序、代码集或指令集,以及调用存储在存储器820内的数据,执行服务器的各种功能和处理数据。可选地,处理器810可以采用数字信号处理(Digital Signal Processing,DSP)、现场可编程阵列(Field-Programmable Gate Array,FPGA)、可编程逻辑阵列(Programmable Logic Array,PLA)中的至少一种硬件形式来实现。处理器810可集成中央处理器(Central Processing Unit,CPU)和调制解调器等中的一种或几种的组合。其中,CPU主要处理操作系统和应用程序等;调制解调器用于处理无线通信。可以理解的是,上述调制解调器也可以不集成到处理器810中,单独通过一芯片进行实现。
[0150] 可选地,处理器810执行存储器820中的程序指令时实现下上述各个方法实施例提供的数据同步方法。
[0151] 存储器820可以包括随机存储器(Random Access Memory,RAM),也可以包括只读存储器(Read-Only Memory)。可选地,该存储器820包括非瞬时性计算机可读介质(non-transitory computer-readable storage medium)。存储器820可用于存储指令、程序、代码、代码集或指令集。存储器820可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、用于至少一个功能的指令、用于实现上述各个方法实施例的指令等;存储数据区可存储根据服务器的使用所创建的数据等。
[0152] 本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
[0153] 以上所述仅为本申请实施例的较佳实施例,并不用以限制本申请实施例,凡在本申请实施例的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请实施例的保护范围之内。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈