System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本申请涉及数据库,尤其涉及一种redis服务加载数据的方法和装置、电子设备和存储介质。
技术介绍
1、redis作为一个基于单线程的内存kv(键值对,key-value)数据库服务,被广泛应用在互联网缓存服务中,redis服务主要优点就是数据类型丰富,低延迟,高性能广泛满足各种高并发场景。redis服务支持两种数据持久化格式,一个种是rdb格式,一种是aof格式,数据加载一般是加载aof格式或者rdb格式的文件。
2、在相关技术中,当redis服务的主线程阻塞式加载rdb文件以将数据加载到内存中时,会间断的处理一下io事件以及模块事件,以防止被外部请求认为本redis服务已经中断,当然,这种间断性的对io事件以及模块事件的处理也会导致服务能力的下降。
3、因此,相关技术中存在redis服务加载数据文件时服务能力下降的问题。
技术实现思路
1、本申请提供了一种redis服务加载数据的方法和装置、电子设备和存储介质,以至少解决相关技术中存在redis服务加载数据文件时服务能力下降的问题。
2、根据本申请实施例的一个方面,提供了一种redis服务加载数据的方法,包括:
3、redis服务的主线程接收到需要加载到内存中的目标数据;
4、在所述主线程确定每个redis数据库不存在重新哈希状态的情况下,redis服务的后台线程对所述目标数据进行解析,并将解析得到的数据加载至备用数组中;
5、在确定将所述目标数据完全加载至所
6、可选地,如前述的方法,所述主线程确定每个redis数据库不存在重新哈希状态,包括:
7、所述主线程确定出所述redis数据库的dict字典表的第一当前状态以及expire字典表的第二当前状态;
8、所述主线程在确定所述第一当前状态以及所述第二当前状态均不存在重新哈希状态的情况下,确定所述redis数据库不存在重新哈希状态。
9、可选地,如前述的方法,在所述主线程确定每个redis数据库不存在重新哈希状态之后,所述方法还包括:
10、所述主线程关闭所述redis数据库的重新哈希功能,以使所述主线程无法令所述redis数据库进入重新哈希状态。
11、可选地,如前述的方法,所述方法还包括:
12、在所述主线程确定每个redis数据库存在重新哈希状态的情况下,所述主线程对所述目标数据进行解析,并将解析得到的数据加载至所述原主数组以及所述备用数组中的有效数组中。
13、可选地,如前述的方法,所述redis服务的后台线程对所述目标数据进行解析,并将解析得到的数据加载至备用数组中,包括:
14、所述后台线程初始化根据所述目标数据的辅助信息确定出初始化槽位数值;
15、基于所述初始化槽位数值,得到包含所述初始化槽位数值的槽位数量的所述备用数组;
16、对所述目标数据进行解析,并将解析得到的数据加载至备用数组中。
17、可选地,如前述的方法,所述解析得到的数据加载至备用数组中,包括:
18、在所述目标数据的数据块为辅助字段类型的第一数据块的情况下,通过对所述第一数据块进行赋值处理,以将所述第一数据块存储至所述备用数组中;
19、在所述目标数据的数据块为键值对字段类型的第二数据块的情况下,通过将所述第二数据块插入到对应的redis数据结构中,以将所述第二数据块存储至所述备用数组中。
20、可选地,如前述的方法,所述主线程通过迁移操作得到包含原主数组中的数据以及所述备用数组中的数据的新的主数组,并完成对所述目标数据的加载,包括:
21、主线程进入重新哈希状态,将所述原主数组中的数据迁移至所述备用数组中,并将所述备用数组标识为新的主数组。
22、根据本申请实施例的另一个方面,还提供了一种redis服务加载数据的装置,包括:
23、接收模块,用于使redis服务的主线程接收到需要加载到内存中的目标数据;
24、加载模块,用于在所述主线程确定每个redis数据库不存在重新哈希状态的情况下,redis服务的后台线程对所述目标数据进行解析,并将解析得到的数据加载至备用数组中;
25、标识模块,用于在确定将所述目标数据完全加载至所述备用数组的情况下,通过所述主线程将所述备用数组标识为主数组,并完成对所述目标数据的加载。
26、根据本申请实施例的又一个方面,还提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器、通信接口和存储器通过通信总线完成相互间的通信;其中,存储器,用于存储计算机程序;处理器,用于通过运行所述存储器上所存储的所述计算机程序来执行上述任一实施例中的方法步骤。
27、根据本申请实施例的又一个方面,还提供了一种计算机可读的存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一实施例中的方法步骤。
28、在本申请实施例中,采用备用数组来加载数据的方式,通过在所述主线程确定每个redis数据库不存在重新哈希状态的情况下,redis服务的后台线程对所述目标数据进行解析,并将解析得到的数据加载至备用数组中,由于对目标数据的加载是通过备用数组进行的,因此原主数组仍然可以用于处理事件;并在确定将所述目标数据完全加载至所述备用数组的情况下,所述主线程通过迁移操作得到包含主数组中的数据以及所述备用数组中的数据的新的主数组,从而可以在实现对目标数据的加载的基础上还能够通过原主数组保障服务能力的目的,达到了在redis服务加载数据文件时还可以稳定服务能力的技术效果,进而解决了相关技术中存在的redis服务加载数据文件时服务能力下降的问题。
本文档来自技高网...【技术保护点】
1.一种Redis服务加载数据的方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,所述主线程确定每个Redis数据库不存在重新哈希状态,包括:
3.根据权利要求2所述的方法,其特征在于,在所述主线程确定每个Redis数据库不存在重新哈希状态之后,所述方法还包括:
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
5.根据权利要求1所述的方法,其特征在于,所述Redis服务的后台线程对所述目标数据进行解析,并将解析得到的数据加载至备用数组中,包括:
6.根据权利要求1所述的方法,其特征在于,所述解析得到的数据加载至备用数组中,包括:
7.根据权利要求1至6中任一项所述的方法,其特征在于,所述主线程通过迁移操作得到包含原主数组中的数据以及所述备用数组中的数据的新的主数组,并完成对所述目标数据的加载,包括:
8.一种Redis服务加载数据的装置,其特征在于,包括:
9.一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,所述处理器、所述通信接口和所述存储器
10.一种计算机可读的存储介质,其特征在于,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行权利要求1至7中任一项中所述的方法。
...【技术特征摘要】
1.一种redis服务加载数据的方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,所述主线程确定每个redis数据库不存在重新哈希状态,包括:
3.根据权利要求2所述的方法,其特征在于,在所述主线程确定每个redis数据库不存在重新哈希状态之后,所述方法还包括:
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
5.根据权利要求1所述的方法,其特征在于,所述redis服务的后台线程对所述目标数据进行解析,并将解析得到的数据加载至备用数组中,包括:
6.根据权利要求1所述的方法,其特征在于,所述解析得到的数据加...
【专利技术属性】
技术研发人员:王贺,
申请(专利权)人:北京金山云网络技术有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。