基于分布式缓存系统的数据存储方法、装置、计算机设备与流程

文档序号:17641979发布日期:2019-05-11 00:44阅读:185来源:国知局
基于分布式缓存系统的数据存储方法、装置、计算机设备与流程

本申请涉及分布式技术领域,特别涉及一种基于分布式缓存系统的数据存储方法、装置、计算机设备。



背景技术:

目前分布式缓存系统要将key和value均匀的分布在缓存集群中,最常规的方式是使用hash取模的方式。比如集群中可使用适量的n,那么key值为k的数据请求很简单的应该路由到hash(k)modn对应的机器中,这种方法虽然简单,但是在一些高速发展的web系统中会有比较大的缺陷,因为随着系统访问压力的增长,缓存系统不得不通过增加缓存节点的方式来提高集群的响应速度和数据承载量。增加节点机器意味着要按照hash取模的方式,在新增节点机器这一刻,大量的缓存因为需要重建而无法命中,甚至需要做整体缓存数据迁移,瞬间给数据库带来极高的系统负载,甚至导致db服务器宕机。

申请内容

针对现有技术不足,本申请提出一种基于分布式缓存系统的数据存储方法、装置、计算机设备,旨在解决在现有的分布式缓存系统中,因hash取模的方式,在新增缓存服务器时,需要做整体缓存数据迁移的问题。

本申请提出的技术方案是:

一种基于分布式缓存系统的数据存储方法,所述方法包括:

配置一个hash函数,其中通过所述hash函数计算key的hash值,所述hash值在0到223-1的闭环空间内;

获取多台缓存服务器的key;

根据所述多台缓存服务器的key,利用所述hash函数计算所述多台缓存服务器的hash值;

获取存储数据的key;

根据所述存储数据的key,利用所述hash函数计算所述存储数据的hash值;

根据所述多台缓存服务器的hash值、所述存储数据的hash值在所述闭环空间的分布,按顺时针存储规则判断所述存储数据的hash值靠近所述多台缓存服务器的hash值中的一个hash值,获得目标缓存服务器;

将所述存储数据存储到所述目标缓存服务器。

进一步地,在所述根据所述多台缓存服务器的hash值、所述存储数据的hash值在所述闭环空间的分布,按顺时针存储规则判断所述存储数据的hash值靠近所述多台缓存服务器的hash值中的一个hash值,获得目标缓存服务器的步骤之后,在将所述存储数据存储到所述目标缓存服务器的步骤之前,包括:

检测在分布式缓存系统中是否存在新增的缓存服务器;若存在所述新增的缓存服务器,则获取所述新增的缓存服务器的key;

根据所述新增的缓存服务器的key,利用所述hash函数计算所述新增的缓存服务器的hash值;

根据所述新增的缓存服务器的hash值、所述目标缓存服务器的hash值、所述存储数据的hash值在所述闭环空间的分布,按所述顺时针存储规则判断所述存储数据的hash值靠近所述新增的缓存服务器的hash值、所述目标缓存服务器的hash值中的一个hash值,获得新目标缓存服务器。

进一步地,在所述根据所述多台缓存服务器的hash值、所述存储数据的hash值在所述闭环空间的分布,按顺时针存储规则判断所述存储数据的hash值靠近所述多台缓存服务器的hash值中的一个hash值,获得目标缓存服务器的步骤之后,在将所述存储数据存储到所述目标缓存服务器的步骤之前,包括:

检测所述目标缓存服务器是否宕机;

若所述目标缓存服务器宕机,则根据所述多台缓存服务器的hash值在所述闭环空间的分布,以及根据所述顺时针存储规则,识别所述目标缓存服务器的hash值的下一个缓存服务器的hash值,获得新目标缓存服务器。

进一步地,在所述将所述存储数据存储到所述目标缓存服务器的步骤中,包括:

将所述存储数据存储到所述新目标缓存服务器。

进一步地,在所述将所述存储数据存储到所述目标缓存服务器的步骤之后,包括:

检测在所述多台缓存服务器中是否存在已删除的缓存服务器;

若存在所述已删除的缓存服务器,则根据所述多台缓存服务器的hash值在所述闭环空间的分布,以及根据所述顺时针存储规则,识别所述已删除的缓存服务器的hash值的下一个缓存服务器的hash值,获得第一缓存服务器;

从数据库中获取所述已删除的缓存服务器对应的数据,获得待存储数据;

将所述待存储数据存储到所述第一缓存服务器。

进一步地,所述缓存服务器的key为缓存服务器的ip或者缓存服务器的名称。

进一步地,所述存储数据的key为数据的字段名称。

本申请还提供一种基于分布式缓存系统的数据存储装置,所述装置包括:

配置模块,用于配置一个hash函数,其中通过所述hash函数计算key的hash值,所述hash值在0到223-1的闭环空间内;

第一获取模块,用于获取多台缓存服务器的key;

第一计算模块,用于根据所述多台缓存服务器的key,利用所述hash函数计算所述多台缓存服务器的hash值;

第二获取模块,用于获取存储数据的key;

第二计算模块,用于根据所述存储数据的key,利用所述hash函数计算所述存储数据的hash值;

判断模块,用于根据所述多台缓存服务器的hash值、所述存储数据的hash值在所述闭环空间的分布,按顺时针存储规则判断所述存储数据的hash值靠近所述多台缓存服务器的hash值中的一个hash值,获得目标缓存服务器;

存储模块,用于将所述存储数据存储到所述目标缓存服务器。

本申请还提供一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述任一项所述的方法的步骤。

本申请还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一项所述的方法的步骤。

根据上述的技术方案,本申请有益效果:通过hash函数计算key的hash值,hash值在0到223-1的闭环空间内,根据多台缓存服务器的key,利用hash函数计算多台缓存服务器的hash值,根据存储数据的key,利用hash函数计算存储数据的hash值,按顺时针存储规则判断存储数据的hash值在闭环空间中靠近多台缓存服务器中的缓存服务器,获得目标缓存服务器,将存储数据存储到目标缓存服务器,为此,即使新增缓存服务器,也不需要做整体缓存数据迁转,旨在解决在现有的分布式缓存系统中,因hash取模的方式,在新增缓存服务器时,需要做整体缓存数据迁移的问题。

附图说明

图1是应用本申请实施例提供的基于分布式缓存系统的数据存储方法的流程图;

图2是应用本申请实施例提供的基于分布式缓存系统的数据存储装置的功能模块图;

图3是应用本申请实施例提供的计算机设备的结构示意框图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

如图1所示,本申请实施例提出一种基于分布式缓存系统的数据存储方法,所述方法包括以下步骤:

步骤s101、配置一个hash函数,其中通过所述hash函数计算key的hash值,所述hash值在0到223-1的闭环空间内。

配置一个hash函数,在hash函数中,将key输入,输出对应的hash值。hash函数计算key的hash值,并且hash值在0到223-1的闭环空间内,也就是说,通过hash函数计算,得到的hash值都是在0到223-1的闭环空间内。闭环空间指的是数值从0开始到223-1,然后223-1下一个数值是0进行循环的闭环。

在本实施例中,hash函数可以使用md4、md5、sha-1、sha256等hash算法的实现。hash函数为md4、md5、sha-1或者sha256的hash算法的函数。

步骤s102、获取多台缓存服务器的key。

从分布式缓存系统中,获取多台缓存服务器的key,在本实施例中,缓存服务器的key为缓存服务器的ip或者缓存服务器的名称。为此,获取多台缓存服务器的ip或者名称,从而获取到多台缓存服务器的key。缓存服务器的key是用于输入hash函数中,通过hash函数计算出缓存服务器的hash值。

步骤s103、根据所述多台缓存服务器的key,利用所述hash函数计算所述多台缓存服务器的hash值。

在获取到多台缓存服务器的key之后,开始对缓存服务器的hash值进行计算,利用hash函数计算,将各缓存服务器的key输入hash函数中,计算各缓存服务器的hash值,根据计算结果,获得多台缓存服务器的hash值。

步骤s104、获取存储数据的key。

在获得多台缓存服务器的hash值之后,获取存储数据的key。在本实施例中,存储数据的key为数据的字段名称。为此,获取数据的字段名称,从而获取到存储数据的key。存储数据的key是用于输入hash函数中,通过hash函数计算出存储数据的hash值。

在本实施例中,在步骤s104中,包括:

检测当前是否存在等待存储的存储数据;

若存在所述存储数据,则获取所述存储数据的key。

在分布式缓存系统中,检测当前是否存在等待存储的存储数据,若存在存储数据,则获取存储数据的key。若不存在存储数据,则再次检测当前是否存在等待存储的存储数据。

步骤s105、根据所述存储数据的key,利用所述hash函数计算所述存储数据的hash值。

在获取到存储数据的key之后,开始对存储数据的hash值进行计算,利用hash函数计算,将存储数据的key输入hash函数中,计算存储数据的hash值,根据计算结果,获得存储数据的hash值。

步骤s106、根据所述多台缓存服务器的hash值、所述存储数据的hash值在所述闭环空间的分布,按顺时针存储规则判断所述存储数据的hash值靠近所述多台缓存服务器的hash值中的一个hash值,获得目标缓存服务器。

在获得多台缓存服务器的hash值、存储数据的hash值之后,根据多台缓存服务器的hash值、存储数据的hash值在闭环空间的分布,并且按顺时针存储规则判断存储数据的hash值靠近多台缓存服务器的hash值中的一个hash值,然后根据hash值与缓存服务器的对应关系,获得目标缓存服务器。顺时针存储规则是在闭环空间中,按顺时针方向,存储数据的hash值靠近的第一个缓存服务器的hash值,该第一个缓存服务器的hash值对应的缓存服务器为存储数据的目标缓存服务器。

步骤s107、将所述存储数据存储到所述目标缓存服务器。

在获得目标缓存服务器之后,将存储数据存储到目标缓存服务器。

在本实施例中,在步骤s106之后,在步骤s107之前,包括:

检测在分布式缓存系统中是否存在新增的缓存服务器;

若存在所述新增的缓存服务器,则获取所述新增的缓存服务器的key;

根据所述新增的缓存服务器的key,利用所述hash函数计算所述新增的缓存服务器的hash值;

根据所述新增的缓存服务器的hash值、所述目标缓存服务器的hash值、所述存储数据的hash值在所述闭环空间的分布,按所述顺时针存储规则判断所述存储数据的hash值靠近所述新增的缓存服务器的hash值、所述目标缓存服务器的hash值中的一个hash值,获得新目标缓存服务器。

在获得目标缓存服务器之后,在分布式缓存系统中进行检测,检测在分布式缓存系统中是否存在新增的缓存服务器,若检测到存在新增的缓存服务器,则获取新增的缓存服务器的key,在本实施例中,获取新增的缓存服务器的ip或者名称,从而获取到新增的缓存服务器的key。在获取到新增的缓存服务器的key之后,开始对新增的缓存服务器的hash值进行计算,利用hash函数计算,将新增的缓存服务器的key输入hash函数中,计算新增的缓存服务器的hash值,根据计算结果,获得新增的缓存服务器的hash值。在获得新增的缓存服务器的hash值之后,根据新增的缓存服务器的hash值、存储数据的hash值在闭环空间的分布,并且按顺时针存储规则判断存储数据的hash值靠近新增的缓存服务器的hash值、目标缓存服务器的hash值中的一个hash值,然后根据hash值与缓存服务器的对应关系,获得新目标缓存服务器。

在所述根据所述新增的缓存服务器的hash值、所述目标缓存服务器的hash值、所述存储数据的hash值在所述闭环空间的分布,按所述顺时针存储规则判断所述存储数据的hash值靠近所述新增的缓存服务器的hash值、所述目标缓存服务器的hash值中的一个hash值,获得新目标缓存服务器的步骤中,包括:

根据所述新增的缓存服务器的hash值、所述目标缓存服务器的hash值、所述存储数据的hash值在所述闭环空间的分布,按所述顺时针存储规则判断所述存储数据的hash值靠近所述新增的缓存服务器的hash值、所述目标缓存服务器的hash值中的一个hash值;

若所述存储数据的hash值靠近所述新增的缓存服务器的hash值,则判定新目标缓存服务器为新增的缓存服务器;

若所述存储数据的hash值靠近所述目标缓存服务器的hash值,则判定新目标缓存服务器为目标缓存服务器。

根据顺时针存储规则,将新增的缓存服务器的hash值、目标缓存服务器的hash值与存储数据的hash值进行比较,若存储数据的hash值靠近新增的缓存服务器的hash值,则新目标缓存服务器为新增的缓存服务器;若存储数据的hash值靠近目标缓存服务器的hash值,则新目标缓存服务器为目标缓存服务器。

对应地,在步骤s107中,包括:

将所述存储数据存储到所述新目标缓存服务器。

在获得新目标缓存服务器之后,将存储数据存储到新目标缓存服务器。

在本实施例中,在步骤s106之后,在步骤s107之前,包括:

检测所述目标缓存服务器是否宕机;

若所述目标缓存服务器宕机,则根据所述多台缓存服务器的hash值在所述闭环空间的分布,以及根据所述顺时针存储规则,识别所述目标缓存服务器的hash值的下一个缓存服务器的hash值,获得新目标缓存服务器。

在获得目标缓存服务器之后,在分布式缓存系统中进行检测,检测目标缓存服务器是否宕机,若目标缓存服务器是宕机,则根据多台缓存服务器的hash值在闭环空间的分布,以及根据顺时针存储规则,识别目标缓存服务器的hash值的下一个缓存服务器的hash值,获得下一个缓存服务器的hash值,在获得下一个缓存服务器的hash值之后,根据下一个缓存服务器的hash值对应的缓存服务器,获得新目标缓存服务器。

对应地,在步骤s107中,包括:

将所述存储数据存储到所述新目标缓存服务器。

在获得新目标缓存服务器之后,将存储数据存储到新目标缓存服务器。

在本实施例中,在步骤s107之后,包括:

检测在所述多台缓存服务器中是否存在已删除的缓存服务器;

若存在所述已删除的缓存服务器,则根据所述多台缓存服务器的hash值在所述闭环空间的分布,以及根据所述顺时针存储规则,识别所述已删除的缓存服务器的hash值的下一个缓存服务器的hash值,获得第一缓存服务器;

从数据库中获取所述已删除的缓存服务器对应的数据,获得待存储数据;

将所述待存储数据存储到所述第一缓存服务器。

在将存储数据存储到目标缓存服务器之后,检测在多台缓存服务器中是否存在已删除的缓存服务器,如果存在已删除的缓存服务器,需要将已删除的缓存服务器上的数据进行迁移,为此,若存在已删除的缓存服务器,则根据多台缓存服务器的hash值在闭环空间的分布,以及根据顺时针存储规则,识别已删除的缓存服务器的hash值的下一个缓存服务器的hash值,获得下一个缓存服务器的hash值,在获得下一个缓存服务器的hash值之后,根据下一个缓存服务器的hash值对应的缓存服务器,获得第一缓存服务器。从数据库中获取已删除的缓存服务器对应的数据,获得待存储数据,将待存储数据存储到第一缓存服务器,完成在已删除的缓存服务器上的数据迁移。

综上所述,通过hash函数计算key的hash值,hash值在0到223-1的闭环空间内,根据多台缓存服务器的key,利用hash函数计算多台缓存服务器的hash值,根据存储数据的key,利用hash函数计算存储数据的hash值,按顺时针存储规则判断存储数据的hash值在闭环空间中靠近多台缓存服务器中的缓存服务器,获得目标缓存服务器,将存储数据存储到目标缓存服务器,为此,即使新增缓存服务器,也不需要做整体缓存数据迁转,旨在解决在现有的分布式缓存系统中,因hash取模的方式,在新增缓存服务器时,需要做整体缓存数据迁移的问题。

如图2所示,本申请实施例提出一种基于分布式缓存系统的数据存储装置1,装置1包括配置模块11、第一获取模块12、第一计算模块13、第二获取模块14、第二计算模块15、判断模块16和存储模块17。

配置模块11,用于配置一个hash函数,其中通过所述hash函数计算key的hash值,所述hash值在0到223-1的闭环空间内。

配置一个hash函数,在hash函数中,将key输入,输出对应的hash值。hash函数计算key的hash值,并且hash值在0到223-1的闭环空间内,也就是说,通过hash函数计算,得到的hash值都是在0到223-1的闭环空间内。闭环空间指的是数值从0开始到223-1,然后223-1下一个数值是0进行循环的闭环。

在本实施例中,hash函数可以使用md4、md5、sha-1、sha256等hash算法的实现。hash函数为md4、md5、sha-1或者sha256的hash算法的函数。

第一获取模块12,用于获取多台缓存服务器的key。

从分布式缓存系统中,获取多台缓存服务器的key,在本实施例中,缓存服务器的key为缓存服务器的ip或者缓存服务器的名称。为此,获取多台缓存服务器的ip或者名称,从而获取到多台缓存服务器的key。缓存服务器的key是用于输入hash函数中,通过hash函数计算出缓存服务器的hash值。

第一计算模块13,用于根据所述多台缓存服务器的key,利用所述hash函数计算所述多台缓存服务器的hash值。

在获取到多台缓存服务器的key之后,开始对缓存服务器的hash值进行计算,利用hash函数计算,将各缓存服务器的key输入hash函数中,计算各缓存服务器的hash值,根据计算结果,获得多台缓存服务器的hash值。

第二获取模块14,用于获取存储数据的key。

在获得多台缓存服务器的hash值之后,获取存储数据的key。在本实施例中,存储数据的key为数据的字段名称。为此,获取数据的字段名称,从而获取到存储数据的key。存储数据的key是用于输入hash函数中,通过hash函数计算出存储数据的hash值。

在本实施例中,第二获取模块14包括:

第一子检测模块,用于检测当前是否存在等待存储的存储数据;

第一子获取模块,用于若存在所述存储数据,则获取所述存储数据的key。

在分布式缓存系统中,检测当前是否存在等待存储的存储数据,若存在存储数据,则获取存储数据的key。若不存在存储数据,则再次检测当前是否存在等待存储的存储数据。

第二计算模块15,用于根据所述存储数据的key,利用所述hash函数计算所述存储数据的hash值。

在获取到存储数据的key之后,开始对存储数据的hash值进行计算,利用hash函数计算,将存储数据的key输入hash函数中,计算存储数据的hash值,根据计算结果,获得存储数据的hash值。

判断模块16,用于根据所述多台缓存服务器的hash值、所述存储数据的hash值在所述闭环空间的分布,按顺时针存储规则判断所述存储数据的hash值靠近所述多台缓存服务器的hash值中的一个hash值,获得目标缓存服务器。

在获得多台缓存服务器的hash值、存储数据的hash值之后,根据多台缓存服务器的hash值、存储数据的hash值在闭环空间的分布,并且按顺时针存储规则判断存储数据的hash值靠近多台缓存服务器的hash值中的一个hash值,然后根据hash值与缓存服务器的对应关系,获得目标缓存服务器。顺时针存储规则是在闭环空间中,按顺时针方向,存储数据的hash值靠近的第一个缓存服务器的hash值,该第一个缓存服务器的hash值对应的缓存服务器为存储数据的目标缓存服务器。

存储模块17,用于将所述存储数据存储到所述目标缓存服务器。

在获得目标缓存服务器之后,将存储数据存储到目标缓存服务器。

在本实施例中,装置1包括:

检测模块,用于检测在分布式缓存系统中是否存在新增的缓存服务器;

第三获取模块,用于若存在所述新增的缓存服务器,则获取所述新增的缓存服务器的key;

第四计算模块,用于根据所述新增的缓存服务器的key,利用所述hash函数计算所述新增的缓存服务器的hash值;

第一判断模块,用于根据所述新增的缓存服务器的hash值、所述目标缓存服务器的hash值、所述存储数据的hash值在所述闭环空间的分布,按所述顺时针存储规则判断所述存储数据的hash值靠近所述新增的缓存服务器的hash值、所述目标缓存服务器的hash值中的一个hash值,获得新目标缓存服务器。

在获得目标缓存服务器之后,在分布式缓存系统中进行检测,检测在分布式缓存系统中是否存在新增的缓存服务器,若检测到存在新增的缓存服务器,则获取新增的缓存服务器的key,在本实施例中,获取新增的缓存服务器的ip或者名称,从而获取到新增的缓存服务器的key。在获取到新增的缓存服务器的key之后,开始对新增的缓存服务器的hash值进行计算,利用hash函数计算,将新增的缓存服务器的key输入hash函数中,计算新增的缓存服务器的hash值,根据计算结果,获得新增的缓存服务器的hash值。在获得新增的缓存服务器的hash值之后,根据新增的缓存服务器的hash值、存储数据的hash值在闭环空间的分布,并且按顺时针存储规则判断存储数据的hash值靠近新增的缓存服务器的hash值、目标缓存服务器的hash值中的一个hash值,然后根据hash值与缓存服务器的对应关系,获得新目标缓存服务器。

第一判断模块包括:

第一子判断模块,用于根据所述新增的缓存服务器的hash值、所述目标缓存服务器的hash值、所述存储数据的hash值在所述闭环空间的分布,按所述顺时针存储规则判断所述存储数据的hash值靠近所述新增的缓存服务器的hash值、所述目标缓存服务器的hash值中的一个hash值;

第一子判定模块,用于若所述存储数据的hash值靠近所述新增的缓存服务器的hash值,则判定新目标缓存服务器为新增的缓存服务器;

第二子判定模块,用于若所述存储数据的hash值靠近所述目标缓存服务器的hash值,则判定新目标缓存服务器为目标缓存服务器。

根据顺时针存储规则,将新增的缓存服务器的hash值、目标缓存服务器的hash值与存储数据的hash值进行比较,若存储数据的hash值靠近新增的缓存服务器的hash值,则新目标缓存服务器为新增的缓存服务器;若存储数据的hash值靠近目标缓存服务器的hash值,则新目标缓存服务器为目标缓存服务器。

对应地,存储模块17包括:

第一子存储模块,用于将所述存储数据存储到所述新目标缓存服务器。

在获得新目标缓存服务器之后,将存储数据存储到新目标缓存服务器。

在本实施例中,装置1包括:

第一检测模块,用于检测所述目标缓存服务器是否宕机;

第一识别模块,用于若所述目标缓存服务器宕机,则根据所述多台缓存服务器的hash值在所述闭环空间的分布,以及根据所述顺时针存储规则,识别所述目标缓存服务器的hash值的下一个缓存服务器的hash值,获得新目标缓存服务器。

在获得目标缓存服务器之后,在分布式缓存系统中进行检测,检测目标缓存服务器是否宕机,若目标缓存服务器是宕机,则根据多台缓存服务器的hash值在闭环空间的分布,以及根据顺时针存储规则,识别目标缓存服务器的hash值的下一个缓存服务器的hash值,获得下一个缓存服务器的hash值,在获得下一个缓存服务器的hash值之后,根据下一个缓存服务器的hash值对应的缓存服务器,获得新目标缓存服务器。

对应地,存储模块17包括:

第二子存储模块,用于将所述存储数据存储到所述新目标缓存服务器。

在获得新目标缓存服务器之后,将存储数据存储到新目标缓存服务器。

在本实施例中,装置1包括:

第二检测模块,用于检测在所述多台缓存服务器中是否存在已删除的缓存服务器;

第二识别模块,用于若存在所述已删除的缓存服务器,则根据所述多台缓存服务器的hash值在所述闭环空间的分布,以及根据所述顺时针存储规则,识别所述已删除的缓存服务器的hash值的下一个缓存服务器的hash值,获得第一缓存服务器;

第五获取模块,用于从数据库中获取所述已删除的缓存服务器对应的数据,获得待存储数据;

第一存储模块,用于将所述待存储数据存储到所述第一缓存服务器。

在将存储数据存储到目标缓存服务器之后,检测在多台缓存服务器中是否存在已删除的缓存服务器,如果存在已删除的缓存服务器,需要将已删除的缓存服务器上的数据进行迁移,为此,若存在已删除的缓存服务器,则根据多台缓存服务器的hash值在闭环空间的分布,以及根据顺时针存储规则,识别已删除的缓存服务器的hash值的下一个缓存服务器的hash值,获得下一个缓存服务器的hash值,在获得下一个缓存服务器的hash值之后,根据下一个缓存服务器的hash值对应的缓存服务器,获得第一缓存服务器。从数据库中获取已删除的缓存服务器对应的数据,获得待存储数据,将待存储数据存储到第一缓存服务器,完成在已删除的缓存服务器上的数据迁移。

综上所述,通过hash函数计算key的hash值,hash值在0到223-1的闭环空间内,根据多台缓存服务器的key,利用hash函数计算多台缓存服务器的hash值,根据存储数据的key,利用hash函数计算存储数据的hash值,按顺时针存储规则判断存储数据的hash值在闭环空间中靠近多台缓存服务器中的缓存服务器,获得目标缓存服务器,将存储数据存储到目标缓存服务器,为此,即使新增缓存服务器,也不需要做整体缓存数据迁转,旨在解决在现有的分布式缓存系统中,因hash取模的方式,在新增缓存服务器时,需要做整体缓存数据迁移的问题。

如图3所示,本申请实施例中还提供一种计算机设备,该计算机设备可以是服务器,其内部结构可以如图3所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设计的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储基于分布式缓存系统的数据存储方法的模型等数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种基于分布式缓存系统的数据存储方法。

上述处理器执行上述基于分布式缓存系统的数据存储方法的步骤:配置一个hash函数,其中通过所述hash函数计算key的hash值,所述hash值在0到223-1的闭环空间内;获取多台缓存服务器的key;根据所述多台缓存服务器的key,利用所述hash函数计算所述多台缓存服务器的hash值;获取存储数据的key;根据所述存储数据的key,利用所述hash函数计算所述存储数据的hash值;根据所述多台缓存服务器的hash值、所述存储数据的hash值在所述闭环空间的分布,按顺时针存储规则判断所述存储数据的hash值靠近所述多台缓存服务器的hash值中的一个hash值,获得目标缓存服务器;将所述存储数据存储到所述目标缓存服务器。

在一个实施例中,上述根据所述多台缓存服务器的hash值、所述存储数据的hash值在所述闭环空间的分布,按顺时针存储规则判断所述存储数据的hash值靠近所述多台缓存服务器的hash值中的一个hash值,获得目标缓存服务器的步骤之后,在将所述存储数据存储到所述目标缓存服务器的步骤之前,包括:

检测在分布式缓存系统中是否存在新增的缓存服务器;若存在所述新增的缓存服务器,则获取所述新增的缓存服务器的key;

根据所述新增的缓存服务器的key,利用所述hash函数计算所述新增的缓存服务器的hash值;

根据所述新增的缓存服务器的hash值、所述目标缓存服务器的hash值、所述存储数据的hash值在所述闭环空间的分布,按所述顺时针存储规则判断所述存储数据的hash值靠近所述新增的缓存服务器的hash值、所述目标缓存服务器的hash值中的一个hash值,获得新目标缓存服务器。

在一个实施例中,上述根据所述多台缓存服务器的hash值、所述存储数据的hash值在所述闭环空间的分布,按顺时针存储规则判断所述存储数据的hash值靠近所述多台缓存服务器的hash值中的一个hash值,获得目标缓存服务器的步骤之后,在将所述存储数据存储到所述目标缓存服务器的步骤之前,包括:

检测所述目标缓存服务器是否宕机;

若所述目标缓存服务器宕机,则根据所述多台缓存服务器的hash值在所述闭环空间的分布,以及根据所述顺时针存储规则,识别所述目标缓存服务器的hash值的下一个缓存服务器的hash值,获得新目标缓存服务器。

在一个实施例中,上述将所述存储数据存储到所述目标缓存服务器的步骤中,包括:

将所述存储数据存储到所述新目标缓存服务器。

在一个实施例中,上述将所述存储数据存储到所述目标缓存服务器的步骤之后,包括:

检测在所述多台缓存服务器中是否存在已删除的缓存服务器;

若存在所述已删除的缓存服务器,则根据所述多台缓存服务器的hash值在所述闭环空间的分布,以及根据所述顺时针存储规则,识别所述已删除的缓存服务器的hash值的下一个缓存服务器的hash值,获得第一缓存服务器;

从数据库中获取所述已删除的缓存服务器对应的数据,获得待存储数据;

将所述待存储数据存储到所述第一缓存服务器。

在一个实施例中,上述缓存服务器的key为缓存服务器的ip或者缓存服务器的名称。

在一个实施例中,上述存储数据的key为数据的字段名称。

本领域技术人员可以理解,图3中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定。

本申请实施例的计算机设备,通过hash函数计算key的hash值,hash值在0到223-1的闭环空间内,根据多台缓存服务器的key,利用hash函数计算多台缓存服务器的hash值,根据存储数据的key,利用hash函数计算存储数据的hash值,按顺时针存储规则判断存储数据的hash值在闭环空间中靠近多台缓存服务器中的缓存服务器,获得目标缓存服务器,将存储数据存储到目标缓存服务器,为此,即使新增缓存服务器,也不需要做整体缓存数据迁转,旨在解决在现有的分布式缓存系统中,因hash取模的方式,在新增缓存服务器时,需要做整体缓存数据迁移的问题。

本申请一实施例还提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现一种基于分布式缓存系统的数据存储方法,具体为:配置一个hash函数,其中通过所述hash函数计算key的hash值,所述hash值在0到223-1的闭环空间内;获取多台缓存服务器的key;根据所述多台缓存服务器的key,利用所述hash函数计算所述多台缓存服务器的hash值;获取存储数据的key;根据所述存储数据的key,利用所述hash函数计算所述存储数据的hash值;根据所述多台缓存服务器的hash值、所述存储数据的hash值在所述闭环空间的分布,按顺时针存储规则判断所述存储数据的hash值靠近所述多台缓存服务器的hash值中的一个hash值,获得目标缓存服务器;将所述存储数据存储到所述目标缓存服务器。

在一个实施例中,上述根据所述多台缓存服务器的hash值、所述存储数据的hash值在所述闭环空间的分布,按顺时针存储规则判断所述存储数据的hash值靠近所述多台缓存服务器的hash值中的一个hash值,获得目标缓存服务器的步骤之后,在将所述存储数据存储到所述目标缓存服务器的步骤之前,包括:

检测在分布式缓存系统中是否存在新增的缓存服务器;若存在所述新增的缓存服务器,则获取所述新增的缓存服务器的key;

根据所述新增的缓存服务器的key,利用所述hash函数计算所述新增的缓存服务器的hash值;

根据所述新增的缓存服务器的hash值、所述目标缓存服务器的hash值、所述存储数据的hash值在所述闭环空间的分布,按所述顺时针存储规则判断所述存储数据的hash值靠近所述新增的缓存服务器的hash值、所述目标缓存服务器的hash值中的一个hash值,获得新目标缓存服务器。

在一个实施例中,上述根据所述多台缓存服务器的hash值、所述存储数据的hash值在所述闭环空间的分布,按顺时针存储规则判断所述存储数据的hash值靠近所述多台缓存服务器的hash值中的一个hash值,获得目标缓存服务器的步骤之后,在将所述存储数据存储到所述目标缓存服务器的步骤之前,包括:

检测所述目标缓存服务器是否宕机;

若所述目标缓存服务器宕机,则根据所述多台缓存服务器的hash值在所述闭环空间的分布,以及根据所述顺时针存储规则,识别所述目标缓存服务器的hash值的下一个缓存服务器的hash值,获得新目标缓存服务器。

在一个实施例中,上述将所述存储数据存储到所述目标缓存服务器的步骤中,包括:

将所述存储数据存储到所述新目标缓存服务器。

在一个实施例中,上述将所述存储数据存储到所述目标缓存服务器的步骤之后,包括:

检测在所述多台缓存服务器中是否存在已删除的缓存服务器;

若存在所述已删除的缓存服务器,则根据所述多台缓存服务器的hash值在所述闭环空间的分布,以及根据所述顺时针存储规则,识别所述已删除的缓存服务器的hash值的下一个缓存服务器的hash值,获得第一缓存服务器;

从数据库中获取所述已删除的缓存服务器对应的数据,获得待存储数据;

将所述待存储数据存储到所述第一缓存服务器。

在一个实施例中,上述缓存服务器的key为缓存服务器的ip或者缓存服务器的名称。

在一个实施例中,上述存储数据的key为数据的字段名称。

本申请实施例的存储介质,通过hash函数计算key的hash值,hash值在0到223-1的闭环空间内,根据多台缓存服务器的key,利用hash函数计算多台缓存服务器的hash值,根据存储数据的key,利用hash函数计算存储数据的hash值,按顺时针存储规则判断存储数据的hash值在闭环空间中靠近多台缓存服务器中的缓存服务器,获得目标缓存服务器,将存储数据存储到目标缓存服务器,为此,即使新增缓存服务器,也不需要做整体缓存数据迁转,旨在解决在现有的分布式缓存系统中,因hash取模的方式,在新增缓存服务器时,需要做整体缓存数据迁移的问题。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的和实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可以包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双速据率sdram(ssrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。

以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内所作的任何修改、等同替换和改进等,均应包括在本申请的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1