一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

Redis数据持久化方法及系统与流程

2021-11-03 21:10:00 来源:中国专利 TAG:

redis数据持久化方法及系统
技术领域
1.本发明属于redis缓存数据库技术应用技术领域,尤其涉及一种redis数据持久化方法及系统。


背景技术:

2.redis(remote dictionary server,远程字典服务)是一个高性能键值型内存数据库,具有访问性能高、数据类型丰富、可扩展性好等特点,近年来在互联网领域得到广泛应用。为提高缓存数据的可靠性,redis提供了两种缓存数据的持久化方式:rdb(在指定的时间间隔能对数据进行快照存储)和aof(记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据)。rdb持久化方式通过定期拉起子进程来生成快照文件。当redis缓存数据规模较大时时可能会消耗相对较长的时间,导致redis查询出现卡顿甚至长时间阻塞,且还会带来大量的网络和磁盘i/o问题,影响redis对外提供服务的能力;aof持久化在将每次对服务器的写操作记录在aof文件中,这样对redis频繁写操作时会导致aof的文件增大,严重影响性能,在数据恢复时花费更长时间。


技术实现要素:

3.为了解决现有技术存在的问题,本发明提供一种redis数据持久化方法,能够提高redis数据持久化性能。
4.本发明所要解决的技术问题是通过以下技术方案实现的:第一方面,提供了一种redis数据持久化方法,包括:根据持久化周期扫描待持久化的全部redis实例,将扫描获取的数据进行快照存储到文件系统;在持久化周期内,响应于接收到的redis数据修改命令,根据接收到的redis数据修改命令将数据滚动写入文件系统,所述redis数据修改命令由redis数据库的数据变化触发生成。
5.结合第一方面,进一步的,通过守护进程实时监控各redis实例的运行情况,对异常redis实例进行数据恢复。
6.结合第一方面,进一步的,扫描待持久化的全部redis实例具体为:外部持久化服务通过scan命令扫描各redis实例存储的key,每次扫描不超过1000条。
7.结合第一方面,进一步的,,所述将扫描获取的数据进行快照存储到文件系统具体为:将扫描获取的数据转换为redis数据写入命令集,并执行该数据写入命令集将数据以文件快照形式存入分布式文件系统。
8.结合第一方面,进一步的,所述通过触发消息将redis数据修改命令发送给消息总线具体为:代理服务redisproxy接收全部的redis数据修改命令并将其发送到分布消息总线
kafka。
9.结合第一方面,进一步的,所述对异常redis实例进行数据恢复具体为:若守护进程监控到某个redis实例异常退出,则立即重启该异常redis实例,redis实例启动后从文件系统中读取最近一个持久化周期的快照文件和触发消息更新的文件加载到内存并提交redis数据库。
10.第二方面,提供了一种redis数据持久化系统,包括:快照持久化模块:用于根据持久化周期通过外部持久化服务扫描待持久化的全部redis实例,将扫描获取的数据进行快照存储到文件系统;触发消息持久化模块:用于在持久化周期内通过触发消息将redis数据修改命令发送给消息总线,外部持久化服务根据接收到的redis数据修改命令将数据滚动写入文件系统。
11.结合第二方面,进一步的,还包括:数据恢复模块:用于通过守护进程实时监控各redis实例的运行情况,对异常redis实例进行数据恢复。
12.本发明有益效果:本发明中外部快照文件持久化和触发式消息文件持久化服务进程独立与redis缓存进程,redis缓存服务主进程不需要进行任何磁盘io操作,因此不会影响redis缓存服务端的读写性能。
13.快照文件持久化和触发式消息文件持久化相结合方式,可以更好的保护数据不丢失。
14.持久化日志文件的命令通过非常可读的方式进行记录,日志文件紧凑,全量备份,这个特性非常适合灾难恢复或者做灾难性的误删除的紧急恢复。
附图说明
15.图1是本发明提供的redis数据持久化方法的流程图;图2是本发明中redis数据恢复流程图。
具体实施方式
16.为了进一步描述本发明的技术特点和效果,以下结合附图和具体实施方式对本发明做进一步描述。
17.实施例1本发明所提出的一种redis数据持久化方法,如图1

2所示,包括:步骤一、根据持久化周期(缺省为5分钟)通过外部持久化服务扫描待持久化的全部redis实例,将扫描获取的数据进行快照存储到文件系统。
18.具体为:(1)在缓存持久化服务周期内对每个redis实例中存储的特定key,外部持久化服务通过scan命令进行周期性扫描直到获取所有的key,考虑到对redis性能的影响,scan命令一次扫描不超过1000条,直至cursor为0结束扫描。
19.对每个redis实例中存储的特定key,通过scan命令进行周期性扫描直到获取所有的key,考虑到对redis性能的影响,scan命令一次扫描不超过1000条,直至cursor为0结束
扫描。
20.(2)遍历扫描得到的key,通过redis命令逐条读取key对应的value(例如读取键值为hash类型命令为:hmget key
ꢀ“
01 02 03

59)。
21.(3)将读到的值组织成redis的写入命令(例如:hmset key 01 value,status 02 value,status值组织成redis的写入命令,并将命令集写入分布式快照文件系统。
22.步骤二、基于redis缓存触发式消息文件持久化服务部署,用于在外部文件快照持久化周期内(缺省为5分钟)由redisproxy代理服务将修改redis数据请求(包括每一个写、删除操作请求,不包括查询操作请求)提交给分布式消息总线kafka,持久化服务会接收修改命令的消息并滚动写入分布式文件系统。
23.具体为:代理服务redisproxy接收全部的写、删除redis命令请求并发送到分布消息总线kafka;触发式持久化服务tpserver接收并解析kafka发送的消息内容;将消息内容组织成redis的写入命令(例如:hmset key 01 value,status 02 value,status成redis的写入命令,并将其写入触发式持久化文件。
24.基于redis缓存数据恢复服务部署,此服务具体流程如图2所示,通过守护进程redisdaemon在后台实时监控对应节点的运行情况,如果某个redis节点异常退出,则守护进程检测到对应的redis节点异常离线后,及时(秒级以内)自动拉起拉起对应的异常节点。同时由redis从分布式文件系统中读取最近一个周期的外部快照文件和触发式更新文件,加载数据到内存,再向redis服务分批提交数据,由于持久化数据格式遵循resp协议,redis可以直接识别并入库,无需进行任何转换。由于该过程不会阻塞redis处理进程,redis对外提供服务不会受到影响,直至数据完全恢复。
25.实施例2本发明还提供了一种redis数据持久化系统,包括:快照持久化模块:用于根据持久化周期通过外部持久化服务扫描待持久化的全部redis实例,将扫描获取的数据进行快照存储到文件系统;触发消息持久化模块:用于在持久化周期内通过触发消息将redis数据修改命令发送给消息总线,外部持久化服务根据接收到的redis数据修改命令将数据滚动写入文件系统。
26.数据恢复模块:用于通过守护进程实时监控各redis实例的运行情况,对异常redis实例进行数据恢复。
27.本领域内的技术人员应明白,本技术的实施例可提供为方法、系统、或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd

rom、光学存储器等)上实施的计算机程序产品的形式。
28.本技术是参照根据本技术实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产
生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
29.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
30.这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
31.最后应当说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员应当理解:依然可以对本发明的具体实施方式进行修改或者等同替换,而未脱离本发明精神和范围的任何修改或者等同替换,其均应涵盖在本发明的权利要求保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献