本公开实施例涉及大数据技术领域,尤其涉及一种基于redis的数据恢复方法、装置、设备及介质。
背景技术:
redis是一种基于内存亦可持久化的日志型键值数据库。相关技术中,redis的数据持久化方式包括rdb方式和aof方式两种。其中,rdb方式是把当前内存中的数据集快照写入磁盘,在恢复数据库数据时只要直接将快照文件读取到内存里即可,数据恢复速度较快,但是数据内容不够全面,数据恢复时采用的数据集快照中可能不包括redis异常关闭时的所有数据结果;aof方式是以独立日志的方式记录每次写命令,在恢复数据库数据时,需要重新执行aof文件中的命令以达到恢复数据的目的,但是数据恢复的速度较慢,占用空间较大。
在redis中,一般只能采用rdb方式或者aof方式中的一种进行数据持久化操作,无法兼顾数据的全面性和持久化的速度。
技术实现要素:
为了解决上述技术问题或者至少部分地解决上述技术问题,本公开实施例提供了一种基于redis的数据恢复方法、装置、设备及介质。
本公开实施例第一方面提供了一种基于redis的数据恢复方法,其中,redis包括rdb文件和aof文件,该方法包括:响应于数据恢复操作启动,获取redis默认的rdb文件和aof文件;基于获取到的rdb文件,执行第一数据恢复操作,得到第一恢复结果;基于获取到的aof文件中的目标数据,在所述第一恢复结果的基础上执行第二数据恢复操作,得到第二恢复结果,其中,目标数据是指redis默认的rdb文件中缺失的数据。
本公开实施例第二方面提供了一种数据恢复装置,该装置适用于一种redis,该redis中包括rdb文件和aof文件。该装置包括:
获取模块,用于在数据恢复操作启动时,获取redis默认的rdb文件和aof文件。
第一执行模块,用于基于获取到的rdb文件,执行第一数据恢复操作,得到第一恢复结果;
第二执行模块,用于基于获取到的aof文件中的目标数据,在所述第一恢复结果的基础上执行第二数据恢复操作,得到第二恢复结果,其中,目标数据是指rdb文件中缺失的数据。
本公开实施例第三方面提供了一种计算机设备,该计算机设备包括:存储器和处理器;其中,存储器中存储有计算机程序,计算机程序被处理器执行时实现上述第一方面的方法。
本公开实施例第四方面提供了一种计算机可读存储介质,该介质上存储有计算机程序,该计算机程序被处理器执行时实现上述第一方面的方法。
本公开实施例提供的技术方案与现有技术相比具有如下优点:
通过同时在redis中运行rdb和aof两种数据持久化方式,当数据恢复操作启动时,获取redis默认的rdb文件和aof文件,并基于获取到的rdb文件,执行第一数据恢复操作,得到第一恢复结果,基于获取到的aof文件中的目标数据,执行第二数据恢复操作,得到第二恢复结果,实现了基于redis的数据全量恢复。由于本公开实施例中的目标数据是指rdb文件缺失的数据,因而,通过aof文件中的目标数据进行第二数据恢复操作,能够对第一数据恢复操作的结果起到补充作用,保证的数据的完整性。同时,由于数据恢复中的大部分数据都是通过rdb方式恢复的,只有rdb文件缺失的数据才采用aof方式进行恢复,因而,兼顾了rdb方式数据恢复速度快的优点,提高了数据恢复的效率。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是相关技术提供的一种基于rdb方式的数据恢复方法示意图;
图2是相关技术提供的一种基于aof方式的数据恢复方法示意图;
图3是本公开实施例提供的一种基于redis的数据恢复方法的流程图;
图4是本公开实施例提供的一种基于redis的数据恢复方法的流程图;
图5是本公开实施例提供的一种基于redis的备份方法的示意图;
图6是本公开实施例提供的一种数据恢复装置的结构示意图;
图7是本公开实施例提供的一种计算机设备的结构示意图。
具体实施方式
为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。
为了方便理解本公开实施例的技术方案,下面首先对本公开实施例设计的专业名词进行解释:
redis:是一种基于内存亦可持久化的日志型,键值数据库。
rdb:是redis用来数据持久化的一种方式。具体的,图1是相关技术提供的一种基于rdb方式的数据持久化方法示意图。如图1所示,在基于rdb方式的数据持久化过程中,装载有redis的计算机设备在接收到诸如“save”或者“bgsave”等备份指令后,创建当前内存中数据集的快照,并把数据集快照写入磁盘。当redis异常关闭或者重启时,计算机设备直接从内存的数据集快照中读取数据进行数据恢复。rdb方式的数据恢复速度较快,占用空间较小,但是数据内容通常不够全面,数据恢复时采用的数据集快照中可能不包括redis异常关闭时的所有数据结果。
aof:是redis用来数据持久化的一种方式。具体的,图2是相关技术提供的一种基于aof方式的数据持久化方法示意图。如图2所示,在基于aof方式的数据持久化过程中,装载有redis的计算机设备从接收到“bgrewriteaof”指令或者从初始启动aof开始,就将针对redis的写操作以日志的方式记录到aof文件中。当redis异常关闭或者重启时,通过重新执行aof文件中记录的写操作来恢复数据。aof方式的数据恢复速度较慢,占用空间较大,但是数据能够得到较为完整的恢复。
数据持久化:是指把内存中的数据(比如内存中的对象——用对象来封装数据)保存到可永久保存的存储设备或数据库中。
在相关技术中,redis一般通过aof方式或rdb方式中的一种进行数据持久化操作,无法兼顾aof方式和rdb方式的优点,避免aof方式和rdb方式的缺点。
针对相关技术存在的上述技术问题,本公开实施例提供了一种基于redis的数据恢复方案,该方案通过同时在redis中运行rdb和aof两种数据持久化方式,实现了aof方式和rdb方式互补的目的,使得本公开的数据恢复方案既能够兼顾aof方式和rdb方式的优点,又能够避免aof方式和rdb方式的缺点。
示例的,图3是本公开实施例提供的一种基于redis的数据恢复方法的流程图。该方法示例性的可以由一种装载有redis的计算机设备执行,该计算机设备上可以同时运行aof方式和rdb方式。该计算机设备上装载的redis中可以包括以rdb方式得到的rdb文件,以及以aof方式得到的aof文件。该方法包括:
步骤301、响应于数据恢复操作启动,获取redis默认的rdb文件和aof文件。
步骤302、基于获取到的rdb文件,执行第一数据恢复操作,得到第一恢复结果。
步骤303、基于获取到的aof文件中的目标数据,在第一恢复结果的基础上执行第二数据恢复操作,得到第二恢复结果,其中,目标数据是指获取到的rdb文件中缺失的数据。
具体的,本实施例所称的数据恢复操作可以在redis中任何需要恢复数据的场景下执行。为了便于理解,本实施例的数据恢复场景可以示例性的理解为一种redis异常关闭后的重启场景。
本实施例中,redis默认的rdb文件是以rdb方式生成的用于记录内存中的数据集快照的文件。在本实施例中,rdb文件可以根据预设策略进行更新,比如,在一种实施方式中,可以配置每间隔预设的备份服务周期对内存中的数据集执行一次快照,然后采用最新得到的数据集快照替换rdb文件中旧的数据集快照,或者,也可以以增量的方式将最新的数据集快照添加到rdb文件中。在rdb文件中可以记录每个数据集快照对应的获取时间。在又一种实施方式中,也可以通过监测业务量的方式,在业务量小于预设阈值时,执行rdb文件的更新操作,以避免rdb文件的更新操作对业务执行造成影响。或者,在还一种实施方式中,还可以配置在每次监测到针对redis的写操作时,在写操作完成之前或者之后对rdb文件进行更新操作。当然上述几种实施方式仅为示例说明,并不是对rdb文件更新方式的唯一限定。
本实施例中,redis默认的aof文件是以aof方式生成的用于记录写操作的日志文件。该aof文件中可以包括关于redis启动后的所有写操作的记录,也可以仅包括redis在最近一次rdb文件更新之后,下一次rdb文件更新之前的写操作的记录。在aof文件中还可以包括每个写操作对应的时间。
在本实施例中,redis默认的rdb文件和aof文件均被存储在备份服务器中。
本实施例的数据持久化过程同时采用rdb文件和aof文件进行数据恢复。在redis重启后,数据恢复操作启动,redis所在的计算机设备从备份服务器中获取redis默认的rdb文件和aof文件。通过将rdb文件中最新的数据集快照读取到内存中,实现对数据的第一步恢复,得到第一恢复结果。然后将aof文件中在最新的数据集快照生成时间之后记录的数据作为目标数据,进而通过逐条执行目标数据,得到第二恢复结果。由于目标数据是在最新的数据集快照生成之后记录的数据,最新的数据集快照中不包括该部分数据,因此,在将最新的数据集快照读取到内存中之后,再逐条执行目标数据,就能够补全最新的数据集快照中缺失的数据,从而保证了数据的全面性。
另外,在一些场景中rdb文件或者aof文件可能会存在损坏、丢失等情况。在这种情况下,为了能够保证数据恢复的正常执行,本实施例还可以对rdb文件和/或aof文件的获取情况进行判断,当获取到rdb文件未获取到aof文件时,基于rdb文件进行数据恢复,当获取到aof文件未获取到rdb文件时,基于aof文件进行数据恢复,而当rdb文件和aof文件全部被获取到时,则可以基于本实施例的上述方法基于rdb文件和aof文件进行数据恢复。
本实施例,通过同时在redis中运行rdb和aof两种数据持久化方式,当数据恢复操作启动时,获取redis默认的rdb文件和aof文件,并基于获取到的rdb文件,执行第一数据恢复操作,得到第一恢复结果,基于获取到的aof文件中的目标数据,执行第二数据恢复操作,得到第二恢复结果,实现了基于redis的数据全量恢复。由于本实施例中的目标数据是指rdb文件缺失的数据,因而,通过aof文件中的目标数据进行第二数据恢复操作,能够对第一数据恢复操作的结果起到补充作用,保证的数据的完整性。同时,由于数据恢复中的大部分数据都是通过rdb方式恢复的,只有rdb文件缺失的数据才采用aof方式进行恢复,因而,兼顾了rdb方式数据恢复速度快的优点,提高了数据恢复的效率。
图4是本公开实施例提供的一种基于redis的数据恢复方法的流程图。如图4所示,在针对redis的数据恢复操作启动之前,还可以包括如下方法:
步骤401、响应于达到备份服务的启动条件,基于当前内存中的数据集,生成最新的rdb文件,以及基于redis在最新的rdb文件生成过程中的增量数据生成临时的aof文件。
步骤402、响应于最新的rdb文件生成成功,将redis默认的rdb文件和aof文件,分别替换成最新的rdb文件和临时的aof文件。
本实施例中,备份服务的启动条件可以包括如下中的至少一种:达到预设的备份服务周期、监测到当前业务量小于预设阈值、监测到针对redis的写操作。
示例的,图5是本公开实施例提供的一种基于redis的备份方法的示意图。如图5所示,在本实施例中,每次达到备份服务的启动条件时,redis所在的计算机设备均复刻(或者称为fork)一个子进程对内存中的数据集进行快照,并在取得数据集快照后,将rdb文件中旧的数据集快照替换为最新的数据集快照得到最新的rdb文件。同时,通过主进程依据redis在最新的rdb文件生成过程中的增量数据生成一个临时的aof文件,并在最新的rdb文件生成成功之后,采用临时的aof文件替换redis默认的aof文件。
另外,考虑到rdb文件更新失败的情况,为了保证数据备份的正常执行,在一些实施方式中,还可以通过主进程从数据集快照生成时刻开始或者在最新的rdb文件生成失败之后,基于redis在最新的rdb文件生成过程中的增量数据,更新当前redis默认的aof文件,确保即使最新的rdb文件生成失败,也能够从redis默认的aof文件中获取全面的数据,提高数据持久化的可靠性。
本实施例,通过在启动数据恢复时,创建一个临时的aof文件,通过该临时aof文件记录redis在最新的rdb文件生成过程中的增量数据,并在最新的rdb文件成功生成之后,将redis默认的aof文件替换为该临时aof文件,减小了aof文件的数据量,节约了存储空间。同时在数据恢复时不需要判断aof文件中每条数据的记录时间,此时aof文件中记录的所有增量数据全部为rdb文件缺失的数据,从而可以直接基于aof文件中的数据执行第二数据恢复操作,提高了数据恢复的速度。
图6是本公开实施例提供的一种数据恢复装置的结构示意图。该装置适用于一种redis,该redis中包括rdb文件和aof文件。具体的,本实施例所称的数据恢复装置可以被具体为上述实施例中的计算机设备或者上述计算机设备中的部分功能模块。数据恢复装置60包括:
获取模块61,用于在数据恢复操作启动时,获取redis默认的rdb文件和aof文件.
第一执行模块62,用于基于获取到的rdb文件,执行第一数据恢复操作,得到第一恢复结果。
第二执行模块63,用于基于获取到的aof文件中的目标数据,在第一恢复结果的基础上执行第二数据恢复操作,得到第二恢复结果,其中,目标数据是指rdb文件中缺失的数据。
在一种可行的实施方式中,装置60还可以包括:
生成模块,用于在达到备份服务的启动条件时,基于当前内存中的数据集,生成最新的rdb文件,以及基于redis在最新的rdb文件生成过程中的增量数据生成临时的aof文件。
文件替换模块,用于在最新的rdb文件生成成功时,将redis默认的rdb文件和aof文件,分别替换成最新的rdb文件和临时的aof文件。
在一种可行的实施方式中,装置60还可以包括:
更新模块,用于在最新的rdb文件生成失败时,基于redis在最新的rdb文件生成过程中的增量数据,更新redis默认的aof文件。
在一种可行的实施方式中,备份服务的启动条件,包括:
达到预设的备份服务周期;或者
监测到当前业务量小于预设阈值;或者
监测到针对所述redis的写操作。
在一种可行的实施方式中,第二执行模块63,包括:
确定单元,用于确定aof文件中记录时间在最新的rdb文件生成时间之后的数据为目标数据。
本实施例提供的装置能够用于执行上述图3-图5中任一实施例的方法,其执行方式和有益效果类似,在这里不再赘述。
图7是本公开实施例提供的一种计算机设备的结构示意图,如图7所示,计算机设备70包括:存储器71和处理器72;其中,存储器71中存储有计算机程序,计算机程序被处理器72执行时可以实现上述图3-图5中任一实施例的方法,其执行方式和有益效果类似,在这里不再赘述。
本公开实施例还提供一种计算机可读存储介质,该介质上存储有计算机程序,该计算机程序被处理器执行可以实现上述图3-图5中任一实施例的方法,其执行方式和有益效果类似,在这里不再赘述。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所述的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
1.一种基于redis的数据恢复方法,其特征在于,所述redis中包括rdb文件和aof文件,所述方法包括:
响应于数据恢复操作启动,获取所述redis默认的rdb文件和aof文件;
基于所述rdb文件,执行第一数据恢复操作,得到第一恢复结果;
基于所述aof文件中的目标数据,在所述第一恢复结果的基础上执行第二数据恢复操作,得到第二恢复结果,其中,所述目标数据是指所述rdb文件中缺失的数据。
2.根据权利要求1所述的方法,其特征在于,所述数据恢复操作启动之前,所述方法还包括:
响应于达到备份服务的启动条件,基于当前内存中的数据集,生成最新的rdb文件,以及基于所述redis在所述最新的rdb文件生成过程中的增量数据生成临时的aof文件;
响应于所述最新的rdb文件生成成功,将所述redis默认的rdb文件和aof文件,分别替换成所述最新的rdb文件和所述临时的aof文件。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
响应于所述最新的rdb文件生成失败,基于所述redis在所述最新的rdb文件生成过程中的增量数据,更新所述redis默认的aof文件。
4.根据权利要求2所述的方法,其特征在于,所述备份服务的启动条件,包括:
达到预设的备份服务周期;或者
监测到当前业务量小于预设阈值;或者
监测到针对所述redis的写操作。
5.根据权利要求2-4中任一项所述的方法,其特征在于,所述基于所述aof文件中的目标数据,在所述第一恢复结果的基础上执行第二数据恢复操作,得到第二恢复结果,包括:
确定所述aof文件中记录时间在所述最新的rdb文件生成时间之后的数据为目标数据。
6.一种数据恢复装置,其特征在于,所述装置适用于一种redis,所述redis中包括rdb文件和aof文件,所述装置包括:
获取模块,用于在数据恢复操作启动时,获取所述redis默认的rdb文件和aof文件;
第一执行模块,用于基于所述rdb文件,执行第一数据恢复操作,得到第一恢复结果;
第二执行模块,用于基于所述aof文件中的目标数据,在所述第一恢复结果的基础上执行第二数据恢复操作,得到第二恢复结果,其中,所述目标数据是指所述rdb文件中缺失的数据。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括:
生成模块,用于在达到备份服务的启动条件时,基于当前内存中的数据集,生成最新的rdb文件,以及基于所述redis在所述最新的rdb文件生成过程中的增量数据生成临时的aof文件;
文件替换模块,用于在所述最新的rdb文件生成成功时,将所述redis默认的rdb文件和aof文件,分别替换成所述最新的rdb文件和所述临时的aof文件。
8.根据权利要求7所述的装置,其特征在于,所述装置还包括:
更新模块,用于在所述最新的rdb文件生成失败时,基于所述redis在所述最新的rdb文件生成过程中的增量数据,更新所述redis默认的aof文件。
9.根据权利要求7所述的装置,其特征在于,所述备份服务的启动条件,包括:
达到预设的备份服务周期;或者
监测到当前业务量小于预设阈值;或者
监测到针对所述redis的写操作。
10.根据权利要求7-9中任一项所述的装置,其特征在于,所述第二执行模块,包括:
确定单元,用于确定所述aof文件中记录时间在所述最新的rdb文件生成时间之后的数据为目标数据。
11.一种计算机设备,其特征在于,包括:
存储器和处理器;
其中,所述存储器中存储有计算机程序,所述计算机程序被所述处理器执行时实现如权利要求1-5中任一项所述的方法。
12.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1-5中任一项所述的方法。
技术总结