一种针对Redis数据库的内存数据持久化方法和装置的制造方法

文档序号:10624929阅读:175来源:国知局
一种针对Redis数据库的内存数据持久化方法和装置的制造方法
【专利摘要】本发明实施例提供了一种针对Redis数据库的内存数据持久化方法和装置,其中,所述Redis数据库包括位于磁盘的增量文件AOF和快照文件RDB,所述方法包括:当有更新数据需要写入内存时,将所述更新数据对应的第一写入指令顺序添加至所述增量文件AOF中;当所述增量文件AOF的大小大于或等于预设阈值时,将所述内存中已有的数据添加至所述快照文件RDB;清空所述增量文件AOF。本发明只需占用少量的存储空间即可确保内存数据的安全性。
【专利说明】
一种针对Red i s数据库的内存数据持久化方法和装置
技术领域
[0001]本发明涉及移动通信技术领域,特别是涉及一种针对Redis数据库的内存数据持久化方法和一种针对Redis数据库的内存数据持久化装置。
【背景技术】
[0002]随着4G业务的推出,数据处理的复杂性和密集性急剧增加,使得数据的处理量成倍增长,对数据处理速度提出了很高的要求。
[0003]目前,通常采用Redis数据库来提高数据的处理效率,通过将数据存储在内存中,处理完成后再将处理结果存储到磁盘中,减少了内存与磁盘在数据交互过程中的频繁I/O操作,大大提高了数据的处理效率。
[0004]然而,由于内存中的数据都是临时存储的,当发生故障时,容易导致数据会丢失。为了防止数据丢失,Redis数据库采用Snapshot (快照)和增量文件(Append Only File,A0F)的方式确保数据的安全性。
[0005]Snapshot (快照)是周期性的将内存中的数据保存到磁盘中,然而,由于数据是周期性保存的,一旦发生故障,从上次数据保存到发生故障这段时间的数据将全部丢失,可见,Snapshot (快照)并不能够很好地保证数据的安全性,仍然存在丢失部分数据的风险。
[0006]增量文件AOF是将Redis数据库的每次写操作都保存到一个AOF文件,由于AOF文件中保存了每次的写操作,可以很好地确保数据的安全性,然而,AOF文件是不断地累积Redis数据库的写操作,随着时间的推移,AOF文件会变得越来越大,占用大量的存储空间。

【发明内容】

[0007]鉴于上述问题,提出了本发明实施例以便提供一种克服上述问题或者至少部分地解决上述问题的一种针对Redis数据库的内存数据持久化方法和相应的一种针对Redis数据库的内存数据持久化装置。
[0008]为了解决上述问题,本发明实施例公开了一种针对Redis数据库的内存数据持久化方法,所述Redis数据库包括位于磁盘的增量文件AOF和快照文件RDB,所述方法包括:
[0009]当有更新数据需要写入内存时,将所述更新数据对应的第一写入指令顺序添加至所述增量文件AOF中;
[0010]当所述增量文件AOF的大小大于或等于预设阈值时,将所述内存中已有的数据添加至所述快照文件RDB ;
[0011]清空所述增量文件A0F。
[0012]优选的,所述Redis数据库还包括位于所述磁盘的临时文件,所述将所述内存中已有的数据添加至所述快照文件RDB的步骤包括:
[0013]将所述内存中已有的数据写入所述临时文件;
[0014]采用所述临时文件覆盖所述快照文件RDB。
[0015]优选的,所述将所述内存中已有的数据写入所述临时文件的步骤包括:
[0016]调用分叉函数fork创建子进程;
[0017]由所述子进程将所述内存中已有的数据写入所述临时文件。
[0018]本发明实施例还公开了一种针对Redis数据库的内存数据恢复方法,所述Redis数据库包括位于磁盘的增量文件AOF和快照文件RDB,所述快照文件RDB包括第一写入指令,所述第一写入指令按序排列,所述方法包括:
[0019]当有磁盘数据需要恢复至内存时,提取所述快照文件RDB中的数据,并将所提取的数据写入所述内存;
[0020]当所述快照文件RDB中的数据全部写入所述内存后,提取所述第一写入指令;
[0021]将所述第一写入指对应的数据恢复至所述内存。
[0022]优选的,所述将所述第一写入指令对应的数据恢复至所述内存的步骤包括:
[0023]将所述第一写入指令写入所述内存;
[0024]在所述内存中顺序执行所述第一写入指令。
[0025]优选的,所述将所述第一写入指令对应的数据恢复至所述内存的步骤包括:
[0026]获取所述第一写入指令中排序最后的第二写入指令;
[0027]将所述第二写入指令写入所述内存;
[0028]在所述内存中执行所述第二写入指令。
[0029]本发明实施例还公开了一种针对Redis数据库的内存数据持久化装置,所述Redis数据库包括位于磁盘的增量文件AOF和快照文件RDB,所述装置包括:
[0030]第一写入指令添加模块,用于当有更新数据需要写入内存时,将所述更新数据对应的第一写入指令顺序添加至所述增量文件AOF中;
[0031]内存数据添加模块,用于当所述增量文件AOF的大小大于或等于预设阈值时,将所述内存中已有的数据添加至所述快照文件RDB ;
[0032]增量文件AOF清空模块,用于清空所述增量文件A0F。
[0033]本发明实施例还公开了一种针对Redis数据库的内存数据恢复装置,所述Redis数据库包括位于磁盘的增量文件AOF和快照文件RDB,所述快照文件RDB包括第一写入指令,所述第一写入指令按序排列,所述装置包括:
[0034]数据写入模块,用于当有磁盘数据需要恢复至内存时,提取所述快照文件RDB中的数据,并将所提取的数据写入所述内存;
[0035]第一写入指令提取模块,用于当所述快照文件RDB中的数据全部写入所述内存后,提取所述第一写入指令;
[0036]数据恢复模块,用于将所述第一写入指对应的数据恢复至所述内存。
[0037]优选的,所述数据恢复模块包括:
[0038]第一写入指令写入子模块,用于将所述第一写入指令写入所述内存;
[0039]第一写入指令执行子模块,用于在所述内存中顺序执行所述第一写入指令。
[0040]优选的,所述数据恢复模块包括:
[0041]第二写入指令获取子模块,用于获取所述第一写入指中排序最后的第二写入指令;
[0042]第二写入指令写入子模块,用于将所述第二写入指令写入所述内存;
[0043]第二写入指令执行子模块,用于在所述内存中执行所述第二写入指令。
[0044]本发明实施例包括以下优点:
[0045]本发明实施例当有更新数据需要写入内存时,可以将更新数据对应的第一写入指令添加至增量文件AOF中,当增量文件AOF的大小大于或等于预设阈值时,将内存中已有的数据添加至快照文件RDB,然后清空增量文件A0F,当发生故障时,增量文件AOF保存了从上次添加数据到快照文件RDB至发生故障这段时间内,快照文件RDB没有保存的更新数据对应的第一写入指令,进而确保了内存数据的安全性,同时,由于增量文件AOF中只保存了小于预设阈值的数据量,只占用了少量的存储空间,因而,本发明实施例只需占用少量的存储空间即可确保内存数据的安全性。
【附图说明】
[0046]图1是本发明的一种针对Redis数据库的内存数据持久化方法实施例的步骤流程图;
[0047]图2是本发明的一种针对Redis数据库的内存数据恢复方法实施例的步骤流程图;
[0048]图3是本发明的一种针对Redis数据库的内存数据持久化装置实施例的结构框图;
[0049]图4是本发明的一种针对Redis数据库的内存数据恢复装置实施例的结构框图;
【具体实施方式】
[0050]为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和【具体实施方式】对本发明作进一步详细的说明。
[0051]本发明实施例的核心构思之一在于,充分利用Snapshot (快照)和增量文件AOF的优点,将更新数据对应的第一写入指令添加至增量文件AOF中,当增量文件AOF的大小大于或等于预设阈值时,将内存中已有的数据添加至快照文件RDB中,然后清空增量文件A0F,这样,当发生故障时,增量文件AOF保存了从上次添加数据到快照文件RDB至发生故障这段时间内,快照文件RDB没有保存的更新数据对应的第一写入指令,进而确保了内存数据的安全性,同时,由于增量文件AOF中只保存了小于预设阈值的数据量,只占用了少量的存储空间,因而,本发明实施例只需占用少量的存储空间即可确保内存数据的安全性。
[0052]下面,通过以下具体实施例分别对本申请的方案进行详细介绍。
[0053]实施例一:
[0054]参照图1,示出了本发明的一种针对Redis数据库的内存数据持久化方法实施例的步骤流程图,具体可以包括如下步骤:
[0055]步骤101,当有更新数据需要写入内存时,将所述更新数据对应的第一写入指令顺序添加至所述增量文件AOF中;
[0056]Redis数据库是一种内存数据库,是一中开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。
[0057]Redis数据库将数据存储在内存,直接在内存中读取数据进行相应的操作处理,由于内存的数据读写速度要高出磁盘几个数量级,Redis数据库通过将数据存储在内存能够极大地提高数据的处理效率。
[0058]内存数据具有断电丢失的特性,一旦机器发生故障或重启时,内存中的数据将全部丢失,因而,如何确保内存数据的安全性是内存数据库需要解决的问题,Redis数据库提供了快照文件RDB (即快照,Snapshot)和增量文件AOF (Append Only File)两种方式确保内存数据的安全性。
[0059]快照文件RDB方式是按照一定的策略将内存中的数据写进快照文件RDB中,增量文件AOF方式是将每次对内存数据的写入操作以日志的形式添加到增量文件AOF中。
[0060]在本发明实施例中,Redis数据库可以包括位于磁盘的增量文件AOF和快照文件RDB0
[0061]本发明实施例在有更新数据需要写入内存时,可以将更新数据对应的第一写入指令添加至增量文件AOF中。
[0062]内存通常会对同一个数据进行不断的更新操作,每一次的更新操作都对应一个第一写入指令,本发明实施例可以将每次更新操作对应的第一写入指令按序添加至增量文件AOF中,先添加至增量文件AOF的第一写入指令排在后添加至增量文件AOF的第一写入指令的前面。
[0063]作为本发明的一种优选实施例中,可以对第一写入指令添加排序标识,排序标识可以唯一地标示第一写入指令的排列顺序,如将最先添加的第一写入指令添加I作为排序标识,将第二添加的第一写入指令添加2作为排序标识,往后添加的第一写入指令的排序标识不断累积,当然本领域技术人员也可以根据实际需要,以其他的排序标识标示第一写入指令的排列顺序。
[0064]每次数据更新都将更新数据对应的第一写入指令添加至增量文件AOF中,写入增量文件AOF中的第一写入指令将会越来越多,增量文件AOF的大小将变得越来越大,所占用的存储空间也越来越大。
[0065]步骤102,当所述增量文件AOF的大小大于或等于预设阈值时,将所述内存中已有的数据添加至所述快照文件RDB ;
[0066]在本发明实施例中,当增量文件AOF的大小大于或等于预设阈值时,可以将内存中已有的数据添加至快照文件RDB。
[0067]需要说明的时,预设阈值可以为50MB,也可以是100MB、150MB等等,本领域技术人员可以根据实际需要设定预设阈值的大小,本发明实施例对此并不加以限制。
[0068]在本发明的一种优选实施例中,步骤102可以包括以下子步骤:
[0069]子步骤S11,将所述内存中已有的数据写入所述临时文件;
[0070]Redis数据库可以包括位于磁盘的临时文件,本发明实施例可以将内存中已有的数据写入磁盘中的临时文件。
[0071]作为本发明的一种优选实施例,子步骤Sll可以包括以下子步骤:
[0072]子步骤Slla,调用分叉函数fork创建子进程;
[0073]子步骤Sllb,由所述子进程将所述内存中已有的数据写入所述临时文件。
[0074]子进程是指由另一进程创建的进程,创建子进程的进程是与所创建的子进程对应的父进程。
[0075]在本发明实施例中,由于增量文件AOF中的数据是不断累积的,增量文件AOF的大小将会不断增大,当增量文件AOF的大小大于或等于预设阈值时,可以调用分叉函数fork创建子进程。
[0076]分叉函数fork创建的子进程的数据空间中的数据是由父进程数据空间中的数据复制获得,父子进程之间是相互独立的,子进程的运行并不会影响父进程的正常运行。
[0077]在本发明实施例中,可以由子进程负责将内存中的数据写入临时文件中,子进程并不进行将更新数据写入内存的操作,将更新数据写入内存的操作由父进程负责,因而,将内存数据写入临时文件的操作并不影响内存数据的更新。
[0078]子进程可以采用Snapshot (快照)的方式将内存中已有的数据写入临时文件。
[0079]子步骤S12,采用所述临时文件覆盖所述快照文件RDB。
[0080]在本发明实施例中,快照文件RDB可以只保存内存中最新的数据,因此,将内存数据写入临时文件后,可以由子进程负责采用临时文件覆盖快照文件RDB,丢弃快照文件RDB已有的旧数据,进而确保快照文件RDB只保存内存中最新的数据,节省存储空间。
[0081]步骤103,清空所述增量文件A0F。
[0082]在本发明实施例中,将内存中已有的数据添加至快照文件RDB后,可以将增量文件AOF清空,删除增量文件AOF中已经保存的第一写入指令。
[0083]清空增量文件AOF后可以结束子进程,并重复前述步骤。
[0084]本发明实施例通过将更新数据对应的第一写入指令添加至磁盘中的增量文件A0F,当增量文件AOF的大小大于或等于预设阈值时,将内存中已有的数据添加至快照文件RDB中,清空增量文件A0F,然后继续将更新数据对应的第一写入指令添加至磁盘中的增量文件A0F,这样,当发生故障时,增量文件AOF保存了从上次添加数据到快照文件RDB至发生故障这段时间内,快照文件RDB没有保存的更新数据对应的第一写入指令,进而确保了内存数据的安全性,同时,由于增量文件AOF中只保存了小于预设阈值的数据量,只占用了少量的存储空间,因而,本发明实施例只需占用少量的存储空间即可确保内存数据的安全性。
[0085]实施例二:
[0086]参照图2,示出了本发明的一种针对Redis数据库的内存数据恢复方法实施例的步骤流程图,具体可以包括如下步骤:
[0087]步骤201,当有磁盘数据需要恢复至内存时,提取所述快照文件RDB中的数据,并将所提取的数据写入所述内存;
[0088]在本发明实施例中,Redis数据库包括位于磁盘的增量文件AOF和快照文件RDB。
[0089]快照文件RDB保存有故障发生时内存中的数据,通常,数据是以Snapshot (快照)的方式保存到快照文件RDB中
[0090]增量文件AOF中保存有从将内存数据保存至快照文件RDB至发生故障这段时间内,写入内存中的更新数据对应的第一写入指令,同一数据对应的第一写入指令按序排序。
[0091]当有磁盘数据需要恢复至内存时,本发明实施例可以调用rdbLoad函数,提取快照文件RDB中的数据,并将提取的数据写入内存中,从而将快照文件RDB中的数据恢复至内存。
[0092]步骤202,当所述快照文件RDB中的数据全部写入内存后,提取所述第一写入指令;
[0093]步骤203,将所述第一写入指对应的数据恢复至所述内存。
[0094]将快照文件RDB中的数据全部写入内存后,可以提取增量文件AOF中的第一写入指令,根据第一写入指令可以将第一写入指令对应的数据恢复至内存中。
[0095]作为本发明的一种优选实施例,步骤203可以包括以下子步骤:
[0096]子步骤S21a,将所述第一写入指令写入所述内存;
[0097]子步骤S21b,在所述内存中顺序执行所述第一写入指令。
[0098]本发明实施例可以将提取的第一写入指令写入内存中,然后在内存中顺序执行按序排列的第一写入指令,可以将第一写入指令对应的数据恢复至内存中。
[0099]在本发明的一种优选实施例中,步骤203可以包括以下子步骤:
[0100]子步骤S22a,获取所述第一写入指中排序最后的第二写入指令;
[0101]子步骤S22b,将所述第二写入指令写入所述内存;
[0102]子步骤S22c,在所述内存中执行所述第二写入指令。
[0103]由于同一数据对应的第一写入指令按序排列,本发明实施例可以获取排序最后的第二写入指令,将第二写入指令写入内存中,这样只需在内存中执行一次第二写入指令即可将第一写入指令对应的数据恢复至内存。
[0104]本发明实施例通过先将快照文件RDB中的数据恢复至内存,再将增量文件AOF中的第一写入指令对应的数据恢复至内存,由于快照文件RDB和增量文件AOF的数据量较小,因此,本发明实施例能够快速恢复内存中的数据。
[0105]本发明实施例是与上述针对Redis数据库的内存数据持久化方法实施例一对应的针对Redis数据库的内存数据恢复方法的实施例二,所以描述的比较简单,相关之处参见上述实施例一的部分说明即可,本发明实施例在此不加以详述。
[0106]为使本领域技术人员更好地理解本发明实施例,以下通过具体示例进行说明。
[0107]在客户端和服务器的数据交互中,客户端可以以套接字函数连接到服务端,服务端会相应一个套接字描述,如此就建立了客户端和服务端之间的连接,客户端可以向服务端发送第一写入指令,服务端可以接受客户端的第一写入指令,然后在内存中执行第一写入指令,将第一写入指令对应的更新数据写入内存中。
[0108]在本发明实施例中,由于服务端是采用Redis数据库,写入指令在内存中执行,因而需要采取一定的措施确保内存中数据的安全性。
[0109]以SET命令为例,客户端需将第一写入指令“SET YEAR 2013”发送到服务端,客户端可以调用写入函数,将第一写入指令“SET YEAR 2013”写入到套接字中,以协议内容的形式发送到服务端,服务端接收到协议内容,可以从协议内容中解析出写入指令“ SET YEAR2013”,然后调用setCommand函数,将YEAR值改为2013,实现向内存写入更新数据的效果。
[0110]在本发明实施例中,服务端可以将更新数据对应的第一写入指令“SET YEAR2013”添加至位于磁盘的增量文件AOF中,作为示例,增量文件AOF的文件名可以是increment, aof0
[0111]服务端可以多次将同一数据对应的更新数据写入内存中。
[0112]例如,针对数据YEAR,当服务端接收到第一写入指令“SET YEAR 2014”,服务端可以调用setCommand函数,将YEAR值改为2014,然后第一写入指令“SET YEAR 2014”添加至增量文件AOF中,当服务端接收到一写入指令“SET YEAR 2015”,服务端调用setCommand函数,将YEAR值改为2015,然后一写入指令“SET YEAR 2015”添加至增量文件AOF中。
[0113]本发明实施例可以对同一数据对应的第一写入指令顺序添加至增量文件AOF中,则上述的三个第一写入信息按下列顺序存储“SET YEAR 2013”,“SET YEAR 2014”,“SET YEAR 2015”。
[0114]如此,随着内存数据的不断更新,添加至增量文件AOF的第一写入指令将不断增多,增量文件A0F的大小会不断增大。
[0115]本发明实施例可以预先设定一个阈值,如设定为50MB(也可以是其他值,如 100MB、150MB),当增量文件A0F的大小大于或等于50MB (即预设阈值)时,服务端可以调用分叉函数fork创建子进程,由子进程将当前内存中已有的数据写入位于磁盘的临时文件, 该子进程对应的父进程继续处理客户端的请求命令,进行内存数据的写入操作。
[0116]子进程可以采用Snapshot (快照)的方式将内存中已有的数据写入临时文件后, 采用临时文件将快照文件RDB覆盖掉,确保快照文件RDB中保存内存中最新的数据。
[0117]作为一种优选示例,快照文件RDB的文件名可以是dump, rdb,快照文件RDB的格式可以为:“REDIS | RDB-VERS1N | SELECT-DB | KEY-VALUE-PAIRS | EOF | CHECK-SUM”,真实的快照文件RDB中并不存在“ | ”,在这里是为了方便查看,其中,REDIS标志着一个正确RDB文件的开始,在读取文件时,程序是通过检查是否有“REDIS”来快速判断是否为一个正确的 RDB文件;RDB-VERS10N表示该文件使用的RDB版本号,不同的RDB版本文件是互不兼容的; SELECT-DB表示跟在其后的第一键值所属数据库号码,读入文件时以切分不用数据库,确保数据恢复到正确的数据库上;KEY-VALUE-PAIRS则是真正的第一键值数据内容,而每个第一键值又有“OPT1NAL-EXPIRE-HME | TYPE-OF-VALUE | KEY | VALUE”组成,详细描述第一键值的失效时间、VALUE值类型、KEY值、VALUE值;EOF标志着数据库内存的结尾,需注意并不是文件的结尾;CHECK-SUM表示对文件内容的检验和,当其值为0时,表示服务端不检验。
[0118]将增量文件A0F清空,删除增量文件A0F中的第一写入指令,然后退出子进程,父进程继续将更新数据对应的第一写入指令添加至增量文件A0F中,并重复上述操作。
[0119]如此,从上次数据保存至快照文件RDB到发生故障这段时间的内存数据就以第一写入指令的形式保存到增量文件A0F,由于快照文件RDB占用的存储空间较小,并且,增量文件A0F仅保存了小于预设阈值的数据量,因此,本发明实施例只需较小的存储空间即可保证内存数据的安全性。
[0120]当故障恢复后,需要将磁盘中的数据恢复至内存中时,服务端首先检测快照文件 RDB中是否存在REDIS,当存在REDIS时,判定该快照文件RDB是一个正确的快照文件RDB, 然后从RDB-VERS10N中获取版本号,从SELECT-DB中获取数据库号,然后调用rdbLoad函数将KEY-VALUE-PAIRS中包含的数据提取出来,并将提取的数据写入SELECT-DB对应的数据库中的内存,达到数据恢复的效果。
[0121]将快照文件RDB中的数据全部恢复至内存后,服务端将增量文件A0F中的第一写入指令 “SET YEAR 2013”、“SET YEAR 2014” 和 “SET YEAR 2015” 提取出来,将第一写入指令对应的数据恢复至内存。
[0122]服务端可以通过以下两种方式将第一写入指令对应的数据恢复至内存:
[0123]第一种方式是:服务端按顺序执行所有的第一写入指令“SET YEAR 2013”、“SET YEAR 2014”、“SET YEAR 2015”,如服务端首先执行“SET YEAR 2013”,通过调用 setCommand 函数,将数据YEAR更新为2013,然后执行“SET YEAR 2014”,通过调用setCommand函数,将数据YEAR从2013更新为2014,接着执行“SET YEAR 2015”,通过调用setCommand函数,将数据YEAR从2014更新为2015,最后的数据的恢复结果是内存中数据YEAR的值为2015。
[0124]第二种方式是:服务端首先获取排序在最后的第二写入信息“SET YEAR 2015”,然后执行“SET YEAR 2015”,通过调用setCommand函数,将数据YEAR更新为2015,最后的数据的恢复结果是内存中数据YEAR的值为2015。
[0125]需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
[0126]实施例三:
[0127]参照图3,示出了本发明的一种针对Redis数据库的内存数据持久化装置实施例的结构框图,所述Redis数据库包括位于磁盘的增量文件A0F和快照文件RDB,所述装置包括:
[0128]第一写入指令添加模块301,用于当有更新数据需要写入内存时,将所述更新数据对应的第一写入指令顺序添加至所述增量文件A0F中;
[0129]内存数据添加模块302,用于当所述增量文件A0F的大小大于或等于预设阈值时, 将所述内存中已有的数据添加至所述快照文件RDB ;
[0130]增量文件A0F清空模块303,用于清空所述增量文件A0F。
[0131]在本发明的一种优选实施例中,内存数据添加模块302可以包括以下子模块:
[0132]第一内存数据写入子模块,用于将所述内存中已有的数据写入所述临时文件;
[0133]数据覆盖子模块,用于采用所述临时文件覆盖所述快照文件RDB。
[0134]在本发明的一种优选实施例中,内存数据写入模块,可以包括以下子模块:
[0135]子进程创建子模块,用于调用分叉函数fork创建子进程;
[0136]第二内存数据写入子模块,用于调用子进程将所述内存中已有的数据写入所述临时文件。
[0137]实施例四:
[0138]参照图4,示出了本发明的一种针对Redis数据库的内存数据恢复装置实施例的结构框图,所述Redis数据库包括位于磁盘的增量文件A0F和快照文件RDB,所述快照文件 RDB包括第一写入指令,所述第一写入指令按序排列,所述装置包括:
[0139]数据写入模块401,用于当有磁盘数据需要恢复至内存时,提取所述快照文件RDB 中的数据,并将所提取的数据写入所述内存;
[0140]第一写入指令提取模块402,用于当所述快照文件RDB中的数据全部写入所述内存后,提取所述第一写入指令;
[0141]数据恢复模块403,用于将所述第一写入指对应的数据恢复至所述内存。
[0142]在本发明的一种优选实施例中,数据恢复模块403可以包括以下子模块:
[0143]第一写入指令写入子模块,用于将所述第一写入指令写入所述内存;
[0144]第一写入指令执行子模块,用于在所述内存中顺序执行所述第一写入指令。
[0145]在本发明的一种优选实施例中,数据恢复模块403可以包括以下子模块:
[0146]第二写入指令获取子模块,用于获取所述第一写入指中排序最后的第二写入指令;
[0147]第二写入指令写入子模块,用于将所述第二写入指令写入所述内存;
[0148]第二写入指令执行子模块,用于在所述内存中执行所述第二写入指令。
[0149]对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0150]本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
[0151]本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0152]这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0153]这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0154]尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
[0155]最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
[0156] 以上对本发明所提供的一种针对Redis数据库的内存数据持久化方法、一种针对 Redis数据库的内存数据持恢复方法、一种针对Redis数据库的内存数据持久化装置和一种针对Redis数据库的内存数据持恢复装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在【具体实施方式】及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
【主权项】
1.一种针对RediS数据库的内存数据持久化方法,其特征在于,所述Redis数据库包括位于磁盘的增量文件AOF和快照文件RDB,所述方法包括: 当有更新数据需要写入内存时,将所述更新数据对应的第一写入指令顺序添加至所述增量文件AOF中; 当所述增量文件AOF的大小大于或等于预设阈值时,将所述内存中已有的数据添加至所述快照文件RDB ; 清空所述增量文件A0F。2.根据权利要求1所述的方法,其特征在于,所述Redis数据库还包括位于所述磁盘的临时文件,所述将所述内存中已有的数据添加至所述快照文件RDB的步骤包括: 将所述内存中已有的数据写入所述临时文件; 采用所述临时文件覆盖所述快照文件RDB。3.根据权利要求2所述的方法,其特征在于,所述将所述内存中已有的数据写入所述临时文件的步骤包括: 调用分叉函数fork创建子进程; 由所述子进程将所述内存中已有的数据写入所述临时文件。4.一种针对Redis数据库的内存数据恢复方法,其特征在于,所述Redis数据库包括位于磁盘的增量文件AOF和快照文件RDB,所述快照文件RDB包括第一写入指令,所述第一写入指令按序排列,所述方法包括: 当有磁盘数据需要恢复至内存时,提取所述快照文件RDB中的数据,并将所提取的数据写入所述内存; 当所述快照文件RDB中的数据全部写入所述内存后,提取所述第一写入指令; 将所述第一写入指对应的数据恢复至所述内存。5.根据权利要求4所述的方法,其特征在于,所述将所述第一写入指令对应的数据恢复至所述内存的步骤包括: 将所述第一写入指令写入所述内存; 在所述内存中顺序执行所述第一写入指令。6.根据权利要求4所述的方法,其特征在于,所述将所述第一写入指令对应的数据恢复至所述内存的步骤包括: 获取所述第一写入指令中排序最后的第二写入指令; 将所述第二写入指令写入所述内存; 在所述内存中执行所述第二写入指令。7.一种针对Redis数据库的内存数据持久化装置,其特征在于,所述Redis数据库包括位于磁盘的增量文件AOF和快照文件RDB,所述装置包括: 第一写入指令添加模块,用于当有更新数据需要写入内存时,将所述更新数据对应的第一写入指令顺序添加至所述增量文件AOF中; 内存数据添加模块,用于当所述增量文件AOF的大小大于或等于预设阈值时,将所述内存中已有的数据添加至所述快照文件RDB ; 增量文件AOF清空模块,用于清空所述增量文件A0F。8.一种针对Redis数据库的内存数据恢复装置,其特征在于,所述Redis数据库包括位于磁盘的增量文件AOF和快照文件RDB,所述快照文件RDB包括第一写入指令,所述第一写入指令按序排列,所述装置包括: 数据写入模块,用于当有磁盘数据需要恢复至内存时,提取所述快照文件RDB中的数据,并将所提取的数据写入所述内存; 第一写入指令提取模块,用于当所述快照文件RDB中的数据全部写入所述内存后,提取所述第一写入指令; 数据恢复模块,用于将所述第一写入指对应的数据恢复至所述内存。9.根据权利要求8所述的装置,其特征在于,所述数据恢复模块包括: 第一写入指令写入子模块,用于将所述第一写入指令写入所述内存; 第一写入指令执行子模块,用于在所述内存中顺序执行所述第一写入指令。10.根据权利要求8所述的装置,其特征在于,所述数据恢复模块包括: 第二写入指令获取子模块,用于获取所述第一写入指中排序最后的第二写入指令; 第二写入指令写入子模块,用于将所述第二写入指令写入所述内存; 第二写入指令执行子模块,用于在所述内存中执行所述第二写入指令。
【文档编号】G06F17/30GK105989160SQ201510095590
【公开日】2016年10月5日
【申请日】2015年3月3日
【发明人】张维
【申请人】大唐软件技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1