CN114780643B - 数据同步处理方法、装置、电子设备及可读存储介质 - Google Patents
数据同步处理方法、装置、电子设备及可读存储介质 Download PDFInfo
- Publication number
- CN114780643B CN114780643B CN202210677373.7A CN202210677373A CN114780643B CN 114780643 B CN114780643 B CN 114780643B CN 202210677373 A CN202210677373 A CN 202210677373A CN 114780643 B CN114780643 B CN 114780643B
- Authority
- CN
- China
- Prior art keywords
- data
- dictionary service
- redis
- remote dictionary
- program
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
- G06F16/273—Asynchronous replication or reconciliation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
- G06F9/44526—Plug-ins; Add-ons
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本申请提供了一种数据同步处理方法、装置、电子设备及可读存储介质,应用于Redis客户端,该方法包括:在Redis客户端启动时,加载代理插件程序,以替换所述Redis客户端的默认Redis操作程序;在所述Redis客户端运行时,执行所述代理插件程序,以将所述Redis客户端的操作数据同步至所述Redis服务器的数据持久化队列中,其中,与所述Redis服务器通信连接的目标对象均可读取所述数据持久化队列中的数据。该方法能够极大提升数据同步的效率,同时,还可以适用于多活场景、双活场景等各种场景下的数据同步。
Description
技术领域
本申请涉及计算机技术领域,具体而言,涉及一种数据同步处理方法、装置、电子设备及可读存储介质。
背景技术
远程字典服务(Remote Dictionary Server,简称Redis)是一种内存数据存储结构,能够用作数据库、缓存、消息代理以及流引擎。Redis能够提供丰富的数据结构,并基于此提供数据缓存、分布式锁、数据持久化、事务以及消息队列等功能。在一些场景下,例如以主备方式或多活方式部署的Redis集群中,需要完成Redis的数据同步。
现有技术中,可以通过日志文件进行数据同步。Redis服务器运行时可以写入Redis数据库(Redis DataBase,简称RDB)日志文件或追加文件(Append Only File,简称AOF)日志文件以实现数据备份,当需要进行数据恢复时,可以读取RDB日志文件或AOF日志文件以读取需要恢复的数据。
但是,现有技术的方法需要解析日志文件以获取数据,当日志文件中存储的数据较多时,会导致数据同步的效率较低。
发明内容
本申请的目的在于,针对上述现有技术中的不足,提供一种数据同步处理方法、装置、电子设备及可读存储介质,以解决现有技术中数据同步效率较低的问题。
为实现上述目的,本申请实施例采用的技术方案如下:
第一方面,本申请实施例提供一种数据同步处理方法,应用于Redis客户端,所述Redis客户端与Redis服务器通信连接,Redis服务器上部署有数据持久化队列,所述方法包括:
在Redis客户端启动时,加载代理插件程序,以替换所述Redis客户端的默认Redis操作程序;
在所述Redis客户端运行时,执行所述代理插件程序,以将所述Redis客户端的操作数据同步至所述Redis服务器的所述数据持久化队列中,其中,与所述Redis服务器通信连接的目标对象均可读取所述数据持久化队列中的数据。
作为一种可能的实现方式,所述执行所述代理插件程序,以将所述Redis客户端的操作数据同步至所述Redis服务器的所述数据持久化队列中,包括:
执行所述代理插件程序,同时向所述Redis服务器发起所述Redis客户端的Redis操作指令以及数据同步指令,以将所述Redis客户端的操作数据同步至所述Redis服务器的所述数据持久化队列中。
作为一种可能的实现方式,所述执行所述代理插件程序,同时向所述Redis服务器发起所述Redis操作指令以及数据同步指令,以将所述Redis客户端的操作数据同步至所述Redis服务器的所述数据持久化队列中,包括:
依次执行所述代理插件程序中的启动事务程序、Redis操作程序、数据推送程序以及提交事务程序,以将所述Redis客户端的操作数据同步至所述Redis服务器的所述数据持久化队列中;
其中,所述Redis操作程序用于向所述Redis服务器发起所述Redis客户端的Redis操作指令,所述数据推送程序用于向所述Redis服务器发起所述数据同步指令。
作为一种可能的实现方式,所述加载代理插件程序之前,还包括:
接收插件配置指令,所述插件配置指令中包括所述代理插件程序的标识;
根据所述插件配置指令,通过代理命令将所述代理插件程序配置为所述Redis客户端的目标Redis操作程序。
作为一种可能的实现方式,所述根据所述插件配置指令,通过代理命令将所述代理插件程序配置为所述Redis客户端的目标Redis操作程序,包括:
将所述代理插件程序的标识作为代理命令的参数,以将所述代理插件程序配置为所述Redis客户端的目标Redis操作程序;
所述在Redis客户端启动时,加载代理插件程序,包括:
在所述Redis客户端启动时,解析所述代理命令,以加载所述代理插件程序。
作为一种可能的实现方式,所述方法还包括:
接收数据查看指令;
根据所述数据查看指令,从所述Redis服务器的所述数据持久化队列中读取操作数据。
作为一种可能的实现方式,所述根据所述数据查看指令,从所述Redis服务器的所述数据持久化队列中读取操作数据,包括:
根据所述数据查看指令,向所述Redis服务器发起数据读取指令,以从所述Redis服务器的所述数据持久化队列中读取操作数据。
第二方面,本申请实施例提供一种数据同步处理装置,应用于Redis客户端,所述Redis客户端与Redis服务器通信连接,Redis服务器上部署有数据持久化队列,所述装置包括:
加载模块,用于在Redis客户端启动时,加载代理插件程序,以替换所述Redis客户端的默认Redis操作程序;
执行模块,用于在所述Redis客户端运行时,执行所述代理插件程序,以将所述Redis客户端的操作数据同步至所述Redis服务器的所述数据持久化队列中,其中,与所述Redis服务器通信连接的目标对象均可读取所述数据持久化队列中的数据。
作为一种可能的实现方式,所述执行模块具体用于:
执行所述代理插件程序,同时向所述Redis服务器发起所述Redis客户端的Redis操作指令以及数据同步指令,以将所述Redis客户端的操作数据同步至所述Redis服务器的所述数据持久化队列中。
作为一种可能的实现方式,所述执行模块具体用于:
依次执行所述代理插件程序中的启动事务程序、Redis操作程序、数据推送程序以及提交事务程序,以将所述Redis客户端的操作数据同步至所述Redis服务器的所述数据持久化队列中;
其中,所述Redis操作程序用于向所述Redis服务器发起所述Redis客户端的Redis操作指令,所述数据推送程序用于向所述Redis服务器发起所述数据同步指令。
作为一种可能的实现方式,所述加载模块还用于:
接收插件配置指令,所述插件配置指令中包括所述代理插件程序的标识;
根据所述插件配置指令,通过代理命令将所述代理插件程序配置为所述Redis客户端的目标Redis操作程序。
作为一种可能的实现方式,所述加载模块具体用于:
将所述代理插件程序的标识作为代理命令的参数,以将所述代理插件程序配置为所述Redis客户端的目标Redis操作程序;
相应的,在所述Redis客户端启动时,解析所述代理命令,以加载所述代理插件程序。
作为一种可能的实现方式,所述装置还包括:
读取模块,用于接收数据查看指令,并根据所述数据查看指令,从所述Redis服务器的所述数据持久化队列中读取操作数据。
作为一种可能的实现方式,所述读取模块具体用于:
根据所述数据查看指令,向所述Redis服务器发起数据读取指令,以从所述Redis服务器的所述数据持久化队列中读取操作数据。
第三方面,本申请实施例提供一种电子设备,包括:处理器和存储器,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器执行所述机器可读指令,以执行时执行上述第一方面所述的数据同步处理方法的步骤。
第四方面,本申请实例里提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述第一方面所述的数据同步处理方法的步骤。
本申请实施例提供的数据同步处理方法、装置、电子设备及可读存储介质,在Redis客户端启动时加载代理插件程序,该加载代理插件程序能够替换掉Redis客户端的默认Redis操作程序。相应的,当Redis客户端运行时,该加载代理插件程序被执行,从而可以将Redis客户端的操作数据同步至Redis服务器的数据持久化队列中,以使得目标对象可以根据需要灵活地从该数据持久化队列中读取数据。上述过程中仅需要执行代理插件程序的加载和运行,而无需任何额外的数据解析等处理,因此相比于现有技术,能够极大提升数据同步的效率。同时,当Redis客户端的操作数据被同步至数据持久化队列中之后,与Redis服务器通信连接的所有目标对象均可根据需要灵活从该数据持久化队列中读取数据,而无需仅在主备切换等特定的触发条件下才进行数据同步,因此,即使是在多活场景或双活场景下,也可以实现灵活的数据同步,因此,本实施例还可以适用于主备场景、多活场景或双活场景等各种场景下的数据同步。
另外,在执行代理插件程序时,同时向Redis服务器发起Redis客户端的Redis操作指令以及数据同步指令,使得向Redids服务器的内部访问数据结构中写入的数据以及向数据持久化队列中写入的数据能够保持一致,避免数据读写出现异常。
另外,将Redis操作程序以及数据推送程序包含在同一个事务中执行,由于事务具有一致性的特点,因此,能够保证在Redis操作程序执行Redis操作指令成功时,数据推送程序执行数据同步指令也成功,并且,在Redis操作程序执行Redis操作指令失败无法正常向内部访问数据结构中写入数据时,数据推送程序也不会执行数据同步指令向数据持久化队列中写入数据,从而可以保证Redis服务器的数据保持一致,避免数据读写错误。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的数据同步处理方法的一种示例性的场景示意图;
图2为本申请实施例提供的数据同步处理方法的流程示意图;
图3为Redis客户端与Redis服务器的交互示意图;
图4为本申请实施例提供的数据同步处理方法的另一流程示意图;
图5为本申请实施例提供的数据同步处理方法的又一流程示意图;
图6为本申请实施例提供的一种数据同步处理装置的模块结构图;
图7为本申请实施例提供的另一种数据同步处理装置的模块结构图;
图8为本申请实施例提供的电子设备80结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,应当理解,本申请中附图仅起到说明和描述的目的,并不用于限定本申请的保护范围。另外,应当理解,示意性的附图并未按实物比例绘制。本申请中使用的流程图示出了根据本申请的一些实施例实现的操作。 应该理解,流程图的操作可以不按顺序实现,没有逻辑的上下文关系的步骤可以反转顺序或者同时实施。 此外,本领域技术人员在本申请内容的指引下,可以向流程图添加一个或多个其他操作,也可以从流程图中移除一个或多个操作。
另外,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,本申请实施例中将会用到术语“包括”,用于指出其后所声明的特征的存在,但并不排除增加其它的特征。
现有的基于日志文件实现数据同步的方式由于需要解析日志文件来获取数据,因此,当日志文件中存储的数据较多时,就需要耗费较多的计算资源以及时间以解析日志文件,因此,会导致数据同步的效率较低。
作为另一种可能的实现方式,现有技术中还可能通过模拟复制(replication)方式进行数据同步。这种方式主要应用于部署方式为主备方式的场景中。例如,多个Redis服务器组成一个Redis集群,其中一个Redis服务器作为主服务器,当由于故障等原因需要切换主服务器时,主服务器通过上述的复制方式将数据同步至一个备服务器中以将该备服务器切换为主服务器。这种方式虽然同步效率较高,但是在非主备方式的场景中无法适用。例如,在多活或者双活场景下,各Redis服务器同时工作,同时产生数据,无法通过上述方式将各Redis服务器上的数据同步至其他Redis服务器。
本申请实施例基于上述问题,提出一种数据同步处理方法,通过在Redis客户端加载代理插件程序,当该代理插件程序运行时,能够替换Redis客户端默认的Redis操作程序,以将数据同步至Redis服务器的数据持久化队列中,以使得目标对象可以根据需要灵活地从该数据持久化队列中读取数据,从而极大提升数据同步的效率,并且可以适用于主备场景、多活场景或双活场景等各种场景下。
图1为本申请实施例提供的数据同步处理方法的一种示例性的场景示意图,如图1所示,该场景中可以涉及Redis客户端以及Redis服务器。其中,Redis服务器的数量可以为多个。该多个Redis服务器可以部署在同一机房中,也可以部署在多个机房中。图1中以多个Redis服务器部署在机房A和机房B这两个机房中为例进行示出。部署在同一个机房中的Redis服务器可以作为一个Redis集群。针对一个Redis集群,其内部的Redis服务器可以主备方式部署,也可以通过多活或双活方式部署。不同的Redid集群之间可以相互通信。示例性的,如图1中所示例的,机房A中部署有服务器1、服务器2和服务器3这三个Redis服务器,机房B中部署有服务器4、服务器5和服务器6这三个Redis服务器。服务器1、服务器2和服务器3与服务器5和服务器6可以两两通信连接。根据实际需要,不同Redis集群之间的连接方式也可以为部分连接,本申请对此不作具体限定。
值得说明的是,本申请所述的Redis服务器是一种逻辑服务器,在具体实施过程中,多个Redis服务器可以分别部署在不同的物理服务器上,或者,也可以部署在同一个物理服务器上,本申请对此不作具体限定。示例性的,图1中示例出的机房A中的服务器1、服务器2和服务器3可以部署在同一个物理服务器上,机房B中的服务器4、服务器5和服务器6可以分别部署在不同的物理服务器上。
继续参照图1,本申请所述Redis客户端可以是指需要访问Redis服务器的客户端。其中,访问Redis服务器,可以包括向Redis服务器中写入数据,或者修改或删除Redis服务器中的数据,或者,从Redis服务器中读取数据。基于不同的实现方式,Redis客户端的具体形式可能不同。在一种示例中,在需要通过图形用户界面访问Redis服务器的场景中,Redis客户端例如可以是一个应用程序(Application,简称APP)客户端,通过该APP客户端提供的图形用户界面,用户可以向Redis服务器发起访问指令并查看访问的结果。在另一种示例中,在一些内部或后台的处理场景中,Redis客户端例如可以是一个微服务,该微服务在运行时,可以完成访问Redis服务器的过程。
Redis客户端可以根据实际需要与不同的Redis服务器建立通信连接以访问对应的Redis服务器。图1中以Redis客户端连接至服务器1为例进行示出。其中,与Redis服务器建立通信连接的方式例如可以是向Redis服务器发送帐号密码等方式进行验证,当Redis服务器验证通过后,与Redis客户端建立通信连接。
以下结合多个实施例对本申请实施例的数据同步处理方法进行详细说明。
图2为本申请实施例提供的数据同步处理方法的流程示意图,该方法的执行主体可以为前述的远程字典服务客户端。如图2所示,该方法包括:
S201、在远程字典服务客户端启动时,加载代理插件程序,以替换所述远程字典服务客户端的默认远程字典服务操作程序。
应理解,本申请实施例中所描述的“远程字典服务”即Redis。
可选的,以Redis客户端为APP客户端为例,当用户点击APP客户端的图标,触发APP客户端启动。当APP客户端启动时,相应加载上述的代理插件程序。
Redis服务器可以允许多种语言的Redis客户端访问Redis服务器。示例性的,Redis客户端可以是Java语言的Redis客户端,或者PHP语言的客户端,或者,也可以是Ruby语言的Redis客户端等。为便于理解,本申请以下实施例以Java语言的Redis客户端为例进行说明。
在Java语言的Redis客户端中,预先部署有上述默认Redis操作程序,该默认Redis操作程序在执行时,可以将Redis客户端的输入数据相应写入Redis服务器的内部访问数据结构中。示例性的,默认Redis操作程序为调用Add方法的程序,当该调用Add方法的程序执行时,Redis客户端的输入数据相应写入Redis服务器的字符串(String)数据结构中。该默认Redis操作程序仅能将客户端的输入数据写入Redis服务器的内部访问数据结构中,除该Redis服务器之外的其他Redis服务器无法读取到这些数据。因此,本申请中在Redis客户端启动时,加载上述代理插件程序,以替换上述默认Redis操作程序。在替换之后,程序执行时,相应执行该代理插件程序,而不再执行默认Redis操作程序。以默认Redis操作程序为调用Add方法的程序为例,在上述代理插件程序的代码中所使用的方法名称可以与默认Redis操作程序的代码中所使用的方法名称相同,并且按照后续的代理插件程序的操作流程对该方法进行重写。这样,当代理插件程序被加载后,即可以代替默认Redis操作程序。
可选的,对于Java语言的Redis客户端,可以通过Java代理(Agent)机制实现上述代理插件程序。Java Agent机制的原理为:在加载Java文件之前进行拦截以对字节码进行修改,或者在运行期将已经加载的类的字节码进行修改。本申请中,在Redis客户端启动之前,可以在Redis客户端的Java虚拟机(JAVA Virtual Machine,简称JVM)参数中配置JavaAgent,将Java Agent的程序配置为上述代理插件程序。这样,当Redis客户端启动时,通过上述JVM参数中配置的JAVA Agent,将原有的默认Redis操作程序替换为上述代理插件程序,并加载上述代理插件程序。
示例性的,假设上述代理插件程序的类名称为seekerJedis.jar,则可以配置如下的JVM参数:
-javaagent:/path/seekerJedis.jar
通过该JVM参数,可以将Java Agent的程序配置为上述代理插件程序。
其中,上述代理插件程序的类seekerJedis可以继承JAVA语言的Redis客户端Jedis类。
S202、在上述远程字典服务客户端运行时,执行上述代理插件程序,以将上述远程字典服务客户端的操作数据同步至上述远程字典服务服务器的数据持久化队列中,其中,与上述远程字典服务服务器通信连接的目标对象均可读取该数据持久化队列中的数据。
可选的,Redis服务器上部署有上述数据持久化队列。该数据持久化队列可以通过链表的形式将数据进行串连保存,链表上的每个数据均具有唯一的标识以用于同其他数据进行区分。同时,该数据持久化队列中具有持久化的特征,即数据可以被持久化保存,因此可以被长期反复读取使用。另外,该数据持久化队列还可以支持同时被多个目标对象读取。
其中,上述目标对象例如可以是与该数据持久化队列所在的Redis服务器具有通信连接的其他Redis服务器或者Redis客户端。
经过上述步骤S201之后,上述代理插件程序被加载至Redis客户端中。相应的,在本步骤中,当Redis客户端运行时,可以相应执行上述代理插件程序。当上述代理插件程序执行时,能够将Redis客户端的操作数据同步至Redis服务器的数据持久化队列中。其中,Redis客户端的操作数据可以指需要写入或者更新到Redis服务器的数据。例如可以包括前述的Redis客户端的输入数据,还可以包括该输入数据以外的操作数据。另外,值得说明的是,上述代理插件程序在运行时,除了将上述操作数据同步至上述数据持久化队列中,还会同时执行所替换的默认Redis操作程序的操作,以保证操作数据可以被正确地写入Redis服务器中。示例性的,默认Redis操作程序为Add方法,如果该Add方法执行,Redis客户端的输入数据会相应写入Redis服务器的String数据结构中,则替换该默认Redis操作程序的代理插件程序在执行时,除了将操作数据同步至Redis服务器的数据持久化队列外,还将操作数据写入Redis服务器的String数据结构中。这样,可以使得Redis服务器可以根据需要灵活使用String数据结构中的操作数据。
图3为Redis客户端与Redis服务器的交互示意图,如图3所示,Redis客户端中加载了上述代理插件程序,Redis服务器上部署有数据持久化队列。当Redis客户端运行时,执行上述代理插件程序,通过上述代理插件程序将Redis客户端的操作数据同步至Redis服务器的数据持久化队列中。操作数据同步至数据持久化队列后,与Redis服务器通信连接的各目标对象可以相互独立地读取数据持久化队列中的数据。
本实施例中,在Redis客户端启动时加载代理插件程序,该加载代理插件程序能够替换掉Redis客户端的默认Redis操作程序。相应的,当Redis客户端运行时,该加载代理插件程序被执行,从而可以将Redis客户端的操作数据同步至Redis服务器的数据持久化队列中,以使得目标对象可以根据需要灵活地从该数据持久化队列中读取数据。上述过程中仅需要执行代理插件程序的加载和运行,而无需任何额外的数据解析等处理,因此相比于现有技术,能够极大提升数据同步的效率。同时,当Redis客户端的操作数据被同步至数据持久化队列中之后,与Redis服务器通信连接的所有目标对象均可根据需要灵活从该数据持久化队列中读取数据,而无需仅在主备切换等特定的触发条件下才进行数据同步,因此,即使是在多活场景或双活场景下,也可以实现灵活的数据同步,因此,本实施例还可以适用于主备场景、多活场景或双活场景等各种场景下的数据同步。
作为一种可选的实施方式,在上述步骤S202中执行代理插件程序时,可以按照下述方式执行,以将Redis客户端的操作数据同步至上述数据持久化队列中。
可选的,执行上述代理插件程序,同时向所述Redis服务器发起Redis客户端的Redis操作指令以及数据同步指令,以将所述Redis客户端的操作数据同步至所述Redis服务器的所述数据持久化队列中。
其中,上述Redis操作指令用于完成前述的默认Redis程序的操作步骤,即将Redis客户端的操作数据写入Redis服务器的内部访问数据结构中。上述数据同步指令用于将Redis客户端的操作数据写入上述数据持久化队列中。
其中,根据Redis客户端的语言的不同,上述Redis操作指令以及数据同步指令的具体形式可以不同。继续以JAVA语言的Redis客户端为例,上述Redis操作指令具体可以指Redis服务器提供的用于JAVA客户端的并且向内部访问数据结构中写入数据的接口或方法,例如Add方法。上述数据同步指令具体可以指Redis服务器提供的用于JAVA客户端的并且用于向数据持久化队列中写入数据的接口或方法,例如XAdd方法。在上述代理插件程序执行时,同时调用上述Add方法和上述XAdd方法,即可以向Redis服务器发起Redis操作指令以及数据同步指令。以XAdd方法为例,Redis客户端在调用该方法时,将Redis客户端的操作数据作为该方法的输入参数,该XAdd方法被调用后,Redis服务器相应接收到该输入参数,并且将该输入参数同步至上述数据持久化队列中。
值得说明的是,本实施例中所述的同时向Redis服务器发起Redis操作指令以及数据同步指令,是指Redis操作指令以及数据同步指令的执行需要保持一致。具体的,如果Redis操作指令被执行成功,则数据同步指令也需要执行成功。相反的,如果Redis操作指令未执行成功,则数据同步指令也不需要执行。
本实施例中,在执行代理插件程序时,同时向Redis服务器发起Redis客户端的Redis操作指令以及数据同步指令,使得向Redids服务器的内部访问数据结构中写入的数据以及向数据持久化队列中写入的数据能够保持一致,避免数据读写出现异常。
作为一种可选的实施方式,在上述同时向所述Redis服务器发起所述Redis操作指令以及数据同步指令时,具体可以通过将Redis操作指令以及数据同步指令包含在同一事务中的方式来进行。以下具体进行说明。
可选的,依次执行上述代理插件程序中的启动事务程序、Redis操作程序、数据推送程序以及提交事务程序,以将Redis客户端的操作数据同步至Redis服务器的数据持久化队列中。
其中,上述Redis操作程序用于向Redis服务器发起上述Redis客户端的Redis操作指令,上述数据推送程序用于向述Redis服务器发起所述数据同步指令。
具体的,在上述代理插件程序中,依次包括上述启动事务程序、Redis操作程序、数据推送程序以及提交事务程序这四个程序。继续以前述的JAVA语言的Redis客户端为例,如前文中所示例的,Redis操作指令例如可以是Add方法,则在本实施例中,Redis操作程序具体可以调用该Add方法的一段程序。又如前文所示例的,数据同步指令例如可以是XAdd方法,则在本实施例中,数据推送程序例如可以是调用该XAdd方法的一段程序。另外,在本实施例中,上述启动事务程序可以是调用启动事务的方法或接口的一段程序,上述提交事务程序可以调用提交事务的方法或接口的一段程序。
值得说明的是,在上述代理插件程序中,上述启动事务程序需要首先执行,上述提交事务程序需要在其他三个程序执行完成后再执行。而上述Redis操作程序和上述数据推送程序的执行顺序可以互换。
以下为上述代理插件程序的一种代码示例。应理解,以下仅示出了方法的名称以进行示意,对于方法的具体输入输出参数等不予示出。
SeekerJedis
{Add{
Mult();
Add();
Xadd();
Exec();};
}
其中,Mult方法为启动事务的方法,Exec方法为提交事务的方法。
本实施例中,将Redis操作程序以及数据推送程序包含在同一个事务中执行,由于事务具有一致性的特点,因此,能够保证在Redis操作程序执行Redis操作指令成功时,数据推送程序执行数据同步指令也成功,并且,在Redis操作程序执行Redis操作指令失败无法正常向内部访问数据结构中写入数据时,数据推送程序也不会执行数据同步指令向数据持久化队列中写入数据,从而可以保证Redis服务器的数据保持一致,避免数据读写错误。
以上对通过代理插件程序向数据持久化队列中写入数据的过程进行了说明。以下,对配置代理插件程序的过程进行说明。
图4为本申请实施例提供的数据同步处理方法的另一流程示意图,如图4所示,在前述步骤S201中加载代理插件程序之前,还可以包括:
S401、接收插件配置指令,该插件配置指令中包括上述代理插件程序的标识。
可选的,根据Redis客户端的形式的不同,上述插件配置指令的形式可以相应不同。示例性的,Redis客户端为APP客户端时,配置人员可以利用APP的配置界面,或者,利用APP客户端的后台配置文件等输入上述插件配置指令。
可选的,上述代理插件程序的标识例如可以包括该代理插件程序的类名称以及代码存储路径。
S402、根据上述插件配置指令,通过代理命令将上述代理插件程序配置为Redis客户端的目标Redis操作程序。
可选的,上述代理命令可以将代理插件程序配置为Redis客户端的目标Redis操作程序。即当Redis客户端运行时,由代理插件程序代理Redis客户端的默认操作程序,以实现前述实施例中的方法步骤。
作为一种可选的实施方式,上述步骤S402可以包括:
将上述代理插件程序的标识作为代理命令的参数,以将上述代理插件程序配置为上述Redis客户端的目标Redis操作程序。
继续以前文所述的JAVA语言的Redis客户端为例,代理命令具体可以指前述的Java Agent对应的命令。JAVA Agent的命令可以作为JVM的其中一条命令参数。在该命令中,将代理插件程序的标识作为该命令的参数。例如,代理插件程序的类名称为seekerJedis.jar,存储在/path目录下,则可以在JVM的参数中增加下述的JAVA Agent的命令:
-javaagent:/path/seekerJedis.jar
在该命令中,代理插件程序的标识作为命令的参数。当Redis客户端启动时,JVM启动运行,并执行该条命令,将seekerJedis.jar这个代理插件程序作为Redis客户端的目标Redis操作程序进行加载以替换默认Redis操作程序。
在上述将代理插件程序的标识作为代理命令的参数,以将代理插件程序配置为Redis客户端的目标Redis操作程序的基础上,当Redis客户端启动时加载代理插件程序的过程包括:
在Redis客户端启动时,解析上述代理命令,以加载上述代理插件程序。
继续以上述的JAVA语言的Redis客户端为例,当Redis客户端启动时,JVM启动运行,当运行至上述JAVA Agent的命令时,JVM对该JAVA Agent解析,得到上述代理插件程序的存储路径以及类名称,并从该存储路径下读取该代理插件程序的代码进行加载。如前文所述的,该插件代理程序的代码中所使用的方法名称与默认Redis操作程序的代码中所使用的方法名称相同,因此,在加载后可以代替Redis操作程序。
以下,Redis客户端从上述数据持久化队列中读取操作数据的过程进行说明。
图5为本申请实施例提供的数据同步处理方法的又一流程示意图,如图5所示,上述方法还包括:
S501、接收数据查看指令。
如前文所述的,与Redis服务器通信连接的目标对象均可读取该数据持久化队列中的数据,该目标对象可以是其他的Redis服务器,也可以是Redis客户端。本实施例中,Redis客户端作为上述目标对象,可以从Redis服务器读取数据。
可选的,上述数据查看指令可以是用户通过图形用户界面、命令行等方式所输入的指令。
S502、根据上述数据查看指令,从上述Redis服务器的数据持久化队列中读取操作数据。
作为一种可选的实施方式,Redis客户端可以根据上述数据查看指令,向Redis服务器发起数据读取指令,以从Redis服务器的所述数据持久化队列中读取操作数据。
根据Redis客户端的语言的不同,上述数据读取指令的具体形式可以不同。继续以JAVA语言的Redis客户端为例,上述数据读取指令具体可以指Redis服务器提供的用于JAVA客户端的并且从数据持久化队列中读取数据的接口或方法,例如XRead方法。Redis客户端可以调用该XRead方法,即向Redis服务器发起数据读取指令,从而读取到Redis服务器的数据持久化队列的数据。
本实施例中,Redis客户端在接收到数据查看指令后,通过向Redis服务器发起数据读取指令,可以灵活读取到数据持久化队列中的数据。
基于同一发明构思,本申请实施例中还提供了与数据同步处理方法对应的数据同步处理装置,由于本申请实施例中的装置解决问题的原理与本申请实施例上述数据同步处理方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
图6为本申请实施例提供的一种数据同步处理装置的模块结构图,该装置应用于Redis客户端,所述Redis客户端与Redis服务器通信连接,Redis服务器上部署有数据持久化队列。如图6所示,所述装置包括:
加载模块601,用于在Redis客户端启动时,加载代理插件程序,以替换所述Redis客户端的默认Redis操作程序。
执行模块602,用于在所述Redis客户端运行时,执行所述代理插件程序,以将所述Redis客户端的操作数据同步至所述Redis服务器的所述数据持久化队列中,其中,与所述Redis服务器通信连接的目标对象均可读取所述数据持久化队列中的数据。
作为一种可选的实施方式,所述执行模块602具体用于:
执行所述代理插件程序,同时向所述Redis服务器发起所述Redis客户端的Redis操作指令以及数据同步指令,以将所述Redis客户端的操作数据同步至所述Redis服务器的所述数据持久化队列中。
作为一种可选的实施方式,所述执行模块602具体用于:
依次执行所述代理插件程序中的启动事务程序、Redis操作程序、数据推送程序以及提交事务程序,以将所述Redis客户端的操作数据同步至所述Redis服务器的所述数据持久化队列中。
其中,所述Redis操作程序用于向所述Redis服务器发起所述Redis客户端的Redis操作指令,所述数据推送程序用于向所述Redis服务器发起所述数据同步指令。
作为一种可选的实施方式,所述加载模块601还用于:
接收插件配置指令,所述插件配置指令中包括所述代理插件程序的标识;
根据所述插件配置指令,通过代理命令将所述代理插件程序配置为所述Redis客户端的目标Redis操作程序。
作为一种可选的实施方式,所述加载模块601具体用于:
将所述代理插件程序的标识作为代理命令的参数,以将所述代理插件程序配置为所述Redis客户端的目标Redis操作程序;
相应的,在所述Redis客户端启动时,解析所述代理命令,以加载所述代理插件程序。
图7为本申请实施例提供的另一种数据同步处理装置的模块结构图,如图7所示,所述装置还包括:
读取模块603,用于接收数据查看指令,并根据所述数据查看指令,从所述Redis服务器的所述数据持久化队列中读取操作数据。
作为一种可选的实施方式,所述读取模块603具体用于:
根据所述数据查看指令,向所述Redis服务器发起数据读取指令,以从所述Redis服务器的所述数据持久化队列中读取操作数据。
本申请实施例还提供了一种电子设备80,如图8所示,为本申请实施例提供的电子设备80结构示意图,包括:处理器81、存储器82,可选的,还可以包括总线83。所述存储器82存储有所述处理器81可执行的机器可读指令(比如,图6中的装置中加载模块和执行模块对应的执行指令等),当电子设备80运行时,所述处理器81与所述存储器82之间通过总线83通信,所述机器可读指令被所述处理器81执行时执行前述方法实施例中所述的方法步骤。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述数据同步处理方法的步骤。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考方法实施例中的对应过程,本申请中不再赘述。在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。
Claims (9)
1.一种数据同步处理方法,其特征在于,应用于远程字典服务客户端,所述远程字典服务客户端与远程字典服务服务器通信连接,远程字典服务服务器上部署有数据持久化队列,所述方法包括:
在远程字典服务客户端启动时,加载代理插件程序,以替换所述远程字典服务客户端的默认远程字典服务操作程序;
在所述远程字典服务客户端运行时,执行所述代理插件程序,以将所述远程字典服务客户端的操作数据同步至所述远程字典服务服务器的所述数据持久化队列中,其中,与所述远程字典服务服务器通信连接的目标对象均可读取所述数据持久化队列中的数据;
所述执行所述代理插件程序,以将所述远程字典服务客户端的操作数据同步至所述远程字典服务服务器的所述数据持久化队列中,包括:
执行所述代理插件程序,同时向所述远程字典服务服务器发起所述远程字典服务客户端的远程字典服务操作指令以及数据同步指令,以将所述远程字典服务客户端的操作数据同步至所述远程字典服务服务器的所述数据持久化队列中。
2.根据权利要求1所述的方法,其特征在于,所述执行所述代理插件程序,同时向所述远程字典服务服务器发起所述远程字典服务操作指令以及数据同步指令,以将所述远程字典服务客户端的操作数据同步至所述远程字典服务服务器的所述数据持久化队列中,包括:
依次执行所述代理插件程序中的启动事务程序、远程字典服务操作程序、数据推送程序以及提交事务程序,以将所述远程字典服务客户端的操作数据同步至所述远程字典服务服务器的所述数据持久化队列中;
其中,所述远程字典服务操作程序用于向所述远程字典服务服务器发起所述远程字典服务客户端的远程字典服务操作指令,所述数据推送程序用于向所述远程字典服务服务器发起所述数据同步指令。
3.根据权利要求1或2所述的方法,其特征在于,所述加载代理插件程序之前,还包括:
接收插件配置指令,所述插件配置指令中包括所述代理插件程序的标识;
根据所述插件配置指令,通过代理命令将所述代理插件程序配置为所述远程字典服务客户端的目标远程字典服务操作程序。
4.根据权利要求3所述的方法,其特征在于,所述根据所述插件配置指令,通过代理命令将所述代理插件程序配置为所述远程字典服务客户端的目标远程字典服务操作程序,包括:
将所述代理插件程序的标识作为代理命令的参数,以将所述代理插件程序配置为所述远程字典服务客户端的目标远程字典服务操作程序;
所述在远程字典服务客户端启动时,加载代理插件程序,包括:
在所述远程字典服务客户端启动时,解析所述代理命令,以加载所述代理插件程序。
5.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
接收数据查看指令;
根据所述数据查看指令,从所述远程字典服务服务器的所述数据持久化队列中读取操作数据。
6.根据权利要求5所述的方法,其特征在于,所述根据所述数据查看指令,从所述远程字典服务服务器的所述数据持久化队列中读取操作数据,包括:
根据所述数据查看指令,向所述远程字典服务服务器发起数据读取指令,以从所述远程字典服务服务器的所述数据持久化队列中读取操作数据。
7.一种数据同步处理装置,其特征在于,应用于远程字典服务客户端,所述远程字典服务客户端与远程字典服务服务器通信连接,远程字典服务服务器上部署有数据持久化队列,所述装置包括:
加载模块,用于在远程字典服务客户端启动时,加载代理插件程序,以替换所述远程字典服务客户端的默认远程字典服务操作程序;
执行模块,用于在所述远程字典服务客户端运行时,执行所述代理插件程序,以将所述远程字典服务客户端的操作数据同步至所述远程字典服务服务器的所述数据持久化队列中,其中,与所述远程字典服务服务器通信连接的目标对象均可读取所述数据持久化队列中的数据;
所述执行模块具体用于:执行所述代理插件程序,同时向所述远程字典服务服务器发起所述远程字典服务客户端的远程字典服务操作指令以及数据同步指令,以将所述远程字典服务客户端的操作数据同步至所述远程字典服务服务器的所述数据持久化队列中。
8.一种电子设备,其特征在于,包括:处理器和存储器,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器执行所述机器可读指令,以执行时执行如权利要求1至6任一所述的数据同步处理方法的步骤。
9.一种计算机可读存储介质,其特征在于,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如权利要求1至6任一所述的数据同步处理方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210677373.7A CN114780643B (zh) | 2022-06-16 | 2022-06-16 | 数据同步处理方法、装置、电子设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210677373.7A CN114780643B (zh) | 2022-06-16 | 2022-06-16 | 数据同步处理方法、装置、电子设备及可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114780643A CN114780643A (zh) | 2022-07-22 |
CN114780643B true CN114780643B (zh) | 2022-10-21 |
Family
ID=82421447
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210677373.7A Active CN114780643B (zh) | 2022-06-16 | 2022-06-16 | 数据同步处理方法、装置、电子设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114780643B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110149382A (zh) * | 2019-05-08 | 2019-08-20 | 拉扎斯网络科技(上海)有限公司 | 数据同步的方法、系统、主服务器、同步客户端及介质 |
CN110162571A (zh) * | 2019-04-26 | 2019-08-23 | 厦门市美亚柏科信息股份有限公司 | 一种异构数据库之间数据同步的系统、方法、存储介质 |
CN114328618A (zh) * | 2021-11-30 | 2022-04-12 | 苏州浪潮智能科技有限公司 | 一种缓存数据同步方法、装置、设备及存储介质 |
WO2022095427A1 (zh) * | 2020-11-05 | 2022-05-12 | 平安科技(深圳)有限公司 | Redis缓存管理的方法、装置、计算机设备及存储介质 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108170485B (zh) * | 2016-12-05 | 2021-06-11 | 腾讯科技(深圳)有限公司 | 一种插件加载方法、装置及移动终端 |
CN109347936B (zh) * | 2018-09-30 | 2021-08-24 | 满帮信息咨询有限公司 | Redis代理客户端的实现方法、系统、存储介质及电子设备 |
CN109656698A (zh) * | 2018-12-14 | 2019-04-19 | 平安城市建设科技(深圳)有限公司 | 任务处理方法、管理平台、执行端及计算机可读存储介质 |
-
2022
- 2022-06-16 CN CN202210677373.7A patent/CN114780643B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110162571A (zh) * | 2019-04-26 | 2019-08-23 | 厦门市美亚柏科信息股份有限公司 | 一种异构数据库之间数据同步的系统、方法、存储介质 |
CN110149382A (zh) * | 2019-05-08 | 2019-08-20 | 拉扎斯网络科技(上海)有限公司 | 数据同步的方法、系统、主服务器、同步客户端及介质 |
WO2022095427A1 (zh) * | 2020-11-05 | 2022-05-12 | 平安科技(深圳)有限公司 | Redis缓存管理的方法、装置、计算机设备及存储介质 |
CN114328618A (zh) * | 2021-11-30 | 2022-04-12 | 苏州浪潮智能科技有限公司 | 一种缓存数据同步方法、装置、设备及存储介质 |
Non-Patent Citations (3)
Title |
---|
Investigation on Data Serialization Algorithm for Redis;Sun D J;《Computer Technology and Development》;20171231;全文 * |
基于Redis技术的常用联系人集群架构优化;梅巧玲等;《铁路计算机应用》;20181025(第10期);全文 * |
基于云计算技术的通用日志管理构件;郑清泉;《广东通信技术》;20141115(第11期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN114780643A (zh) | 2022-07-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3792760A1 (en) | Live migration of clusters in containerized environments | |
US8104043B2 (en) | System and method for dynamic cooperative distributed execution of computer tasks without a centralized controller | |
US7574627B2 (en) | Memory dump method, memory dump program and computer system | |
CN112463144B (zh) | 分布式存储的命令行服务方法、系统、终端及存储介质 | |
US20130132942A1 (en) | Application software installation method and application software installation apparatus | |
EP2765508A1 (en) | Installation method and installation device for application software | |
US20130091376A1 (en) | Self-repairing database system | |
JP7256217B2 (ja) | サービス情報処理方法、装置、設備、コンピュータ記憶媒体、及びプログラム | |
CN107193607B (zh) | 用于更新代码文件的方法和装置、存储介质、处理器以及终端 | |
US11269927B2 (en) | Transactional replicator | |
US10523754B2 (en) | Methods for integrating applications with a data storage network and devices thereof | |
US10795747B2 (en) | File synchronizing service status monitoring and error handling | |
JP2021515304A (ja) | システムにおける時系列ログ構造のキーバリュー・ストア内のチェックポイントを使用した障害後のリカバリのための方法、コンピュータ・プログラム、および装置 | |
CN110494849B (zh) | 用于确定跨平台应用迁移的成功的系统和方法 | |
CN108733808B (zh) | 大数据软件系统切换方法、系统、终端设备及存储介质 | |
US7376676B2 (en) | Method, system, and program for autonomic copy services solutions | |
CN114780643B (zh) | 数据同步处理方法、装置、电子设备及可读存储介质 | |
JP2017194729A (ja) | 計算機システムおよびシステム状態再現方法 | |
US20140282527A1 (en) | Applying or Removing Appropriate File Overlays During Live Application Mobility | |
CN114598604A (zh) | 虚拟网络功能实例信息的监控方法、监控装置及终端 | |
JP2021515301A (ja) | システムにおけるガベージ・コレクション処理中の障害からのリカバリのための方法、システムにおけるガベージ・コレクション処理中の障害からのリカバリのためのコンピュータ・プログラム、および装置 | |
CN117389713B (zh) | 存储系统应用业务数据迁移方法、装置、设备及介质 | |
CN114205231B (zh) | 批量启动hadoop集群的方法、系统及可读存储介质 | |
CN108509252A (zh) | 虚拟机启动装置、方法及主机 | |
CN118041934A (zh) | 一种配置文件同步方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |