CN109714430A - 分布式缓存方法、装置、计算机系统及存储介质 - Google Patents
分布式缓存方法、装置、计算机系统及存储介质 Download PDFInfo
- Publication number
- CN109714430A CN109714430A CN201910040989.1A CN201910040989A CN109714430A CN 109714430 A CN109714430 A CN 109714430A CN 201910040989 A CN201910040989 A CN 201910040989A CN 109714430 A CN109714430 A CN 109714430A
- Authority
- CN
- China
- Prior art keywords
- cache
- key
- cache server
- slot
- client
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 31
- 238000003860 storage Methods 0.000 title claims abstract description 25
- 230000007246 mechanism Effects 0.000 claims abstract description 7
- 238000004590 computer program Methods 0.000 claims description 9
- 238000004321 preservation Methods 0.000 claims description 9
- 230000005540 biological transmission Effects 0.000 claims description 3
- 238000005520 cutting process Methods 0.000 claims description 3
- 238000010586 diagram Methods 0.000 description 6
- 238000006243 chemical reaction Methods 0.000 description 5
- 229910002056 binary alloy Inorganic materials 0.000 description 3
- 125000004122 cyclic group Chemical group 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000004888 barrier function Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种分布式缓存方法、装置、计算机设备及存储介质,该方法包括:将缓存客户端分配成若干业务线,并为每条业务线建立一个实例,同时采用命名空间机制对不同客户端进行命名,而后将各实例分成若干个槽,并将每个槽与redis集群中的一个redis节点关联,保存关联信息;当一客户端需缓存由键和值组成的数据时,通过缓存客户端获取缓存数据的键对应的槽,并根据关联信息查找槽对应的redis节点,而后将客户端对应的命名空间和实例名与键进行拼接,形成拼接键,并将缓存数据对应的拼接键及值以键值对的形式缓存至查找到的redis节点中。本发明可以实现客户端与redis节点的点对点直连,不需要中间层代理,也不需要进行频繁地跳转。
Description
技术领域
本发明涉及缓存技术领域,尤其涉及一种分布式缓存方法、装置、计算机系统及存储介质。
背景技术
目前市面上有两种主要的基于redis(REmote DIctionary Server,远程数据服务)的分布式缓存解决方案:redis cluster(集群)和codis(Connection–Mode Data LinkService,连接方式数据链路服务)。采用redis cluster方案时,redis集群中的所有redis节点彼此互联,内部使用二进制协议优化传输速度和带宽;缓存客户端与redis节点直连,不需要中间proxy(代理)层,缓存客户端不需要连接redis集群的所有节点,连接集群中任何一个可用节点即可。然而,redis cluster方案具有一个缺点:在一个redis节点收到查询非本节点数据的请求时,需要重定向跳转到另外一个节点来实现分片策略,这样的方式会显著增加网络开销带来的延时。采用codis方案时,与Redis cluster不同的是,codis在redis集群前添置中心化的codis proxy,并通过codis proxy来识别数据在哪个节点上,无需重定向跳转到另外一个节点来实现分片策略,然而,若中心化的codis proxy一旦发生故障,则会带来巨大的风险。
发明内容
本发明的目的在于提供一种分布式缓存方法、装置、计算机系统及存储介质,用于解决上述现有技术存在的问题。
为了实现上述目的,本发明提供一种分布式缓存方法,包括以下步骤:
S101,将需要缓存数据的多个缓存客户端分配至若干业务线,并为每条业务线建立一个实例,以使同一业务线中的不同缓存客户端对应同一个实例名;
S102,采用命名空间机制对同一业务线中的不同缓存客户端进行命名,以使同一业务线中的不同缓存客户端对应不同的命名空间;
S103,将每一个所述实例分成N个槽,N为自然数;
S104,将每个所述槽与redis集群中的一个redis节点关联,同时保存各所述槽与关联redis节点的关联信息;
S201,判断所述多个缓存客户端中是否有缓存客户端接收到缓存请求,所述缓存请求包括待缓存数据的键和值,若有,则执行步骤S202;
S202,获取所述待缓存数据的键对应的第一目标槽,并根据保存的所述关联信息查找所述第一目标槽对应的第一目标redis节点;
S203,将接收到所述缓存请求的所述缓存客户端对应的命名空间和实例名与所述待缓存数据的键进行拼接,并将拼接的结果作为所述待缓存数据对应的拼接键,而后将所述待缓存数据对应的拼接键和值以键值对的形式缓存至所述第一目标redis节点中。
进一步地,所述分布式缓存方法还包括以下步骤:
S301,判断所述多个缓存客户端中是否有缓存客户端接收到读取请求,所述读取请求包括待读取数据的键,若有,则执行步骤S302;
S302,获取所述待读取数据的键对应的第二目标槽,并根据保存的所述关联信息查找所述第二目标槽对应的第二目标redis节点;
S303,将接收到所述读取请求的所述缓存客户端对应的命名空间和实例名与所述待读取数据的键进行拼接,并将拼接的结果作为所述待读取数据对应的拼接键,而后在所述第二目标redis节点中读取所述待读取数据对应的拼接键对应的值。
进一步地,所述步骤S202采用如下步骤获取所述待缓存数据的键对应的第一目标槽:将所述待缓存数据的键转换成对应的第一二进制数;采用CRC算法获取所述第一二进制数对应的第一校验码;将所第一述校验码与N进行与运算,得到的结果作为所述第一目标槽的序号;
所述步骤S302采用如下步骤获取所述待读取数据的键对应的第二目标槽:将所述待读取数据的键转换成对应的第二二进制数;采用CRC算法获取所述第二二进制数对应的第二校验码;将所述第二校验码与N进行与运算,得到的结果作为所述第二目标槽的序号。
进一步地,所述redis集群中的每个所述redis节点均包括一个主缓存服务器和至少一个从缓存服务器。
进一步地,当某个主缓存服务器故障时,执行如下步骤:
S401、获取故障的主缓存服务器所在的redis节点所包含的各从缓存服务器;
S402、从所述步骤S401获取的各从缓存服务器中确定一个从缓存服务器作为备用主缓存服务器;
S403、将所述备用主缓存服务器替代所述故障的主缓存服务器,并相应更新所述备用主缓存服务器和所述故障的主缓存服务器之间的主从状态。
进一步地,所述步骤S402包括:
S421、向所述步骤S401获取的所述各从缓存服务器发送信息请求;
S422、接收所述各从缓存服务器的反馈信息,并根据所述反馈信息在所述各从缓存服务器中确定正常的从缓存服务器;
S423、在所有正常的从缓存服务器中确定所述备用主缓存服务器。
进一步地,所述步骤423包括:
S4231、获取所有正常的从缓存服务器中各从缓存服务器对应的优先级;
S4232、根据所述优先级在所有正常的从缓存服务器中确定所述备用主缓存服务器。
为了实现上述目的,本发明提供一种分布式缓存装置,包括:
实例分配模块,用于将需要缓存数据的多个缓存客户端分配成若干业务线,并为每条业务线建立一个实例,以使同一业务线中的不同缓存客户端对应同一个实例名;
客户端命名模块,用于采用命名空间机制对同一业务线中的不同缓存客户端进行命名,以使同一业务线中的不同缓存客户端对应不同的命名空间;
实例切分模块,用于将每一个所述实例分成N个槽,N为自然数;
节点关联模块,用于将每个所述槽与redis集群中的一个redis节点关联,同时保存各所述槽与关联redis节点的关联信息;
缓存请求接收判断模块,用于判断所述多个缓存客户端中是否有缓存客户端接收到缓存请求,所述缓存请求包括待缓存数据的键和值;
缓存节点查找模块,用于在所述多个缓存客户端中有缓存客户端接收到所述缓存请求时,根据获取所述缓存数据的键对应的第一目标槽,并根据保存的所述关联信息查找所述第一目标槽对应的redis节点;
数据缓存模块,用于将接收到所述缓存请求的所述缓存客户端对应的命名空间和实例名与所述待缓存数据的键进行拼接,并将拼接的结果作为所述缓存数据对应的拼接键,而后将所述待缓存数据对应的拼接键及值以键值对的形式缓存至所述第一目标redis节点。
进一步地,所述分布式缓存装置还包括:
读取请求接收判断模块,用于判断所述多个缓存客户端中是否有缓存客户端接收到读取请求,所述读取请求包括待读取数据的键;
读取节点查找模块,用于在所述多个缓存客户端中有缓存客户端接收到读取请求时,根据获取所述待读取数据的键对应的第二目标槽,并根据所述关联信息查找所述第二目标槽对应的redis节点;
数据读取模块,用于将接收到所述读取请求的所述缓存客户端对应的命名空间和实例名与所述待读取数据的键进行拼接,并将拼接的结果作为所述待读取数据对应的拼接键,而后在所述第二目标redis节点中读取所述待读取数据对应的拼接键对应的值。
进一步地,所述缓存节点查找模块包括:
第一二进制数转换模块,用于将所述待缓存数据的键转换成对应的第一二进制数;
第一CRC处理模块,用于采用CRC算法获取所述第一二进制数对应的第一校验码;
第一与运算模块,用于将所述第一校验码与N进行与运算,得到的结果作为所述第一目标槽的序号;
所述读取节点查找模块包括:
第二二进制数转换模块,用于将所述待读取数据的键转换成对应的第二二进制数;
第二CRC处理模块,用于采用CRC算法获取所述第二二进制数对应的校验码;
第二与运算模块,用于将所述第二校验码与N进行与运算,得到的结果作为所述第二目标槽的序号。
进一步地,所述redis集群中的每一个redis节点均包括一个主缓存服务器和至少一个从缓存服务器。
进一步地,所述分布式缓存装置还包括:
从缓存服务器获取模块,用于在某主缓存服务器故障时获取故障的主缓存服务器所在的redis节点所包含的各从缓存服务器;
备用主缓存服务器确定模块,用于从获取的各从缓存服务器中确定一个从缓存服务器作为备用主缓存服务器;
主从切换模块,用于将所述备用主缓存服务器替代所述故障的主缓存服务器,并相应更新所述备用主缓存服务器和所述故障的主缓存服务器之间的主从状态。
进一步地,所述从备用主缓存服务器确定模块包括:
请求发送单元,用于向所述从缓存服务器获取模块获取的所述各从缓存服务器发送信息请求;
正常从缓存服务器确定单元,用于接收所述从缓存服务器获取模块获取的各从缓存服务器的反馈信息,并根据所述反馈信息在所述从缓存服务器获取模块获取的各从缓存服务器中确定正常的从缓存服务器;
备用主缓存服务器确定单元,用于在所有正常的从缓存服务器中确定所述备用主缓存服务器。
进一步地,所述备用主缓存服务器确定单元包括:
优先级获取子单元,用于获取所述正常的从缓存服务器中各从缓存服务器对应的优先级;
备用主缓存服务器确定子单元,用于根据所述优先级在所述正常的从缓存服务器中确定所述备用主缓存服务器。
为了实现上述目的,本发明还提供一种计算机系统,其包括多个计算机设备,各计算机设备包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述多个计算机设备的处理器执行所述计算机程序时共同实现前述方法的步骤。
为了实现上述目的,本发明还提供一种计算机可读存储介质,其上存储有计算机程序,所述多个存储介质存储的所述计算机程序被处理器执行时实现前述方法的步骤。
通过采用上述技术方案,本发明具有如下有益效果:
(1)本发明可以实现缓存客户端与redis节点的点对点直连,不需要中间层代理,也不需要进行频繁地跳转,从而避免中间层代理故障带来的风险,也不会导致增加网络开销带来的延时,性能较好;
(2)本发明将多个redis节点统筹起来,共享给多个业务线的缓存客户端使用,节约了资源,提高了资源利用率;
(3)本发明将缓存客户端对应的命名空间和实例名与缓存数据的键进行拼接,保证了共享资源的同时,各缓存客户端在读写存储时不产生冲突;
(4)本发明的redis集群一旦发现主缓存服务器故障,会立即使用从缓存服务器替换主缓存服务器,保证了缓存的高可用。
附图说明
图1为本发明分布式缓存方法的一个实施例的流程图;
图2为本发明分布式缓存方法的一个实施例的原理图;
图3为本发明分布式缓存方法的一个实施例的架构图;
图4为本发明分布式缓存装置的一个实施例的结构框图;
图5为本发明中从备用主缓存服务器确定模块的结构框图;
图6为本发明中确定单元的结构框图;
图7为本发明中计算机设备的硬件架构图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
参阅图1-2,示出了本发明分布式缓存方法的具体步骤,具体如下:
S101,将需要缓存数据的多个缓存客户端分配成若干业务线,并为每条业务线建立一个实例(instance),以使同一业务线中的不同缓存客户端对应同一个实例名,不同务线中的缓存客户端对应不同的实例名。例如,如图2所示,假设有6个需要缓存数据的缓存客户端,即,第一缓存客户端~第六缓存客户端,首先将这6个缓存客户端分成两条业务线,并为每条业务线分配一个实例,以使每条业务线中的各缓存客户端共享对应的实例。具体地,将第一缓存客户端~第三缓存客户端分配为属于业务线A,第四缓存客户端~第六缓存客户端分配为属于业务线B,为业务线A分配实例instance1,为业务线B分配实例instance2,使得第一~第三缓存客户端共享业务线A的instance1,第四~第六缓存客户端6共享业务线B的instance2。
S102,采用命名空间(namespace)机制对同一业务线中的不同缓存客户端进行命名,以使同一业务线中的不同缓存客户端对应不同的命名空间。例如,如图2所示,根据命名空间机制将业务线A中的第一~第三缓存客户端隔离出3个不同的命名空间,分别对应namespace1~namespace3,同样将业务线B中的第四~第六缓存客户端隔离出3个不同的命名空间,分别对应namespace4~namespace6。其中,不同业务线中的缓存客户端既可以对应相同命名空间,也可对应不同命名空间,也就是说,namespace1和namespace4可以是相同的,也可以是不同的。
S103,将每一个实例分成N个槽(slot),N为自然数,在本实施例中N取1024,当然也可以根据需要分成任意多个slot。
S104,将每个slot与redis集群中的一个redis节点关联,同时保存各槽与关联redis节点的关联信息。
S201,判断多个缓存客户端中是否有缓存客户端接收到用户输入的缓存请求,该缓存请求包括待缓存数据的key(键)和value(值),若是,说明该缓存客户端需缓存数据,执行步骤S202,否则,继续等待,直到任意一个缓存客户端接收到用户输入的缓存请求。
S202,根据预定算法获取待缓存数据的key对应的第一目标槽,并根据保存的关联信息查找第一目标槽对应的第一目标redis节点。
S203,将接收到缓存请求的缓存客户端对应的命名空间和实例名与待缓存数据的key进行拼接,从而形成待缓存数据对应的拼接键,并将待缓存数据对应的拼接键及value以键值对的形式缓存至第一目标redis节点中。
例如,当第一缓存客户端接收到一缓存请求,请求将key为“username”、value为“张三”的缓存数据缓存至一redis节点时,首先计算username对应的slot,并根据步骤S104存储的关联信息查找计算得到的slot对应的redis节点,而后将第一缓存客户端对应的命名空间namespace1和实例名instance1与username进行拼接,形成待缓存数据对应的拼接key——namespace1_instance1_username,而后将“namespace1_instance1_username”及“张三”以键值对的形式缓存至前面查找到的redis节点中。
在本施例中,计算username对应的slot的算法如下:首先将username转换成对应的第一二进制数;而后采用CRC(Cyclic Redundancy Check,循环冗余检验)算法获取转换得到的第一二进制数对应的第一校验码;最后将获得的第一校验码与1024进行与运算,得到的结果作为username对应的slot的序号。其中,CRC算法的原理是:假设有二进制数g=101001110100001,该二进制数可表示为代数多项式g(x)=x^14+x^12+x^9+x^8+x^7+x^5+1,其中g中第k位的值,对应g(x)中x^k的系数。将g(x)乘以x^m,既将g后加m个0,然后除以m阶多项式h(x),得到的(m-1)阶余项r(x)对应的二进制码r就是CRC编码。其中,h(x)可以自由选择或者使用国际通行标准,一般按照h(x)的阶数m,将CRC算法称为CRC-m,比如CRC-16、CRC-32、CRC-64等。
S301,判断多个缓存客户端中是否有缓存客户端接收到用户输入的读取请求,该读取请求包括待读取数据的键,若是,说明该缓存客户端需读取缓存数据,执行步骤S302,否则,继续等待,直到任意一个缓存客户端接收到用户输入的读取请求。
S302,根据预定算法获取待读取数据的键对应的第二目标槽,并根据保存的关联信息查找第二目标槽对应的第二目标redis节点。
S303,将接收到读取请求的缓存客户端对应的命名空间和实例名与待读取数据的键进行拼接,从而形成待读取数据对应的拼接键,并在第二目标redis节点中读取待读取数据对应的拼接键对应的值。
例如,当第一缓存客户端接收到读取请求,请求读取键为username对应的待读取数据时,首先计算username对应的slot,并根据存储的关联信息查找计算得到的slot对应的redis节点,而后将第一缓存客户端对应的命名空间namespace1和实例名instance1与username进行拼接,从而形成待读取数据对应的拼接键——namespace1_instance1_username,而后在前面查找到的redis节点中读取“namespace1_instance1_username”对应的value即可。在本施例中,计算username对应的slot的算法如下:首先将username转换成对应的第二二进制数;而后采用CRC算法获取转换得到的第二二进制数对应的第二校验码;最后将获得的第二校验码与1024进行与运算,得到的结果作为username对应的slot的序号。
本发明设计拼接键的目的是为了防止在缓存时发生冲突,具体来说:本发明为了节约资源,提高利用率,将多个redis节点统筹起来共享给多个业务线的缓存客户端使用,但假设两个缓存客户端需缓存的数据的键相同,则会计算出同一个slot。例如,采用CRC16算法对某键进行计算得到的是第350号slot,在一般情况下,由于两个缓存客户端对应的实例不同,第一个缓存客户端对应的实例的350号slot可能关联第一redis节点,第二个缓存客户端对应的实例的350号slot可能关联第二redis节点,所以不会冲突。然而,在特殊情况下,两个slot可能关联同一个节点,因而直接缓存对应的数据的键将会发生冲突。对此,本发明设计了拼接键,这样即使计算得到的两个slot关联的是同一个节点,由于实际缓存数据时的键因拼接了命名空间和实例名而导致不再相同,所以两个缓存客户端的缓存数据缓存于同一节点中时仍然不会发生冲突。
在本实施例中,redis集群中的每一个redis节点均包括一个主缓存服务器和至少一个从缓存服务器。在主缓存服务器的运行过程中,可能因存在故障导致该主缓存服务器停止运行,进而影响对应的缓存数据的读写操作。因此,redis集群需在主缓存服务器出现故障时自动进行维护,以便缓存数据的读写顺利进行,对此,本实施例的分布式缓存方法还包括:
S401、获取故障的主缓存服务器所在的redis节点所包含的各从缓存服务器;
S402、从步骤S401获取的各从缓存服务器中确定一个从缓存服务器作为备用主缓存服务器;
S403、将备用主缓存服务器替代故障的主缓存服务器,并相应更新备用主缓存服务器和故障的主缓存服务器之间的主从状态。
其中,上述步骤S402包括以下步骤:
S421、向步骤401获取的各从缓存服务器发送信息请求;
S422、接收步骤401获取的各从缓存服务器对信息请求的反馈信息,并根据反馈信息在步骤401获取的各从缓存服务器中确定正常的从缓存服务器;
S423、在正常的从缓存服务器中确定备用主缓存服务器。
其中,上述步骤423包括以下步骤:
S4231、获取正常的从缓存服务器中各从缓存服务器对应的优先级;
S4232、根据各从缓存服务器对应的优先级在正常的从缓存服务器中确定备用主缓存服务器。
通过上述技术方案,本发明在主缓存服务器出现故障时,能够自动采用对应的从缓存服务器替代该故障的主缓存服务器,实现了缓存服务器的高可用性,大大提高了redis集群的抗风险能力。
在本发明中,本实施例的分布式缓存方法基于图3所示的硬件架构实现。在该架构中,分布式协调服务器与各缓存客户端直连,各缓存客户端分别与redis集群中的每一个redis节点实现点对点直连,省略了中间层代理,并且在读写缓存时可以准确查找对应节点,不需要进行频繁地跳转。在图3的架构中,分布式协调服务器是上述步骤S101~S104的执行主体,缓存客户端是上述步骤S201~S203、S301~S303的执行主体,redis集群是上述步骤S401~S403的执行主体。
实施例二
如图4所示,示出了本发明一种分布式缓存装置10,包括:
实例分配模块101,用于将需要缓存数据的多个缓存客户端分配成若干业务线,并为每条业务线建立一个实例,以使同一业务线中的不同缓存客户端对应同一个实例名;
客户端命名模块102,用于采用命名空间机制对同一业务线中的不同缓存客户端进行命名,以使同一业务线中的不同缓存客户端对应不同的命名空间;
实例切分模块103,用于将每一个实例分成N个槽,N为自然数,优选N取1024;
节点关联模块104,用于将每个槽与redis集群中的一个redis节点关联,同时保存各槽与关联redis节点的关联信息;
缓存请求接收判断模块105,用于判断多个缓存客户端中是否有缓存客户端接收到缓存请求,缓存请求包括待缓存数据的键和值;
缓存节点查找模块106,用于在多个缓存客户端中有缓存客户端接收到缓存请求时,根据预定算法获取缓存数据的键对应的第一目标槽,并根据保存的关联信息查找第一目标槽对应的第一目标redis节点;
数据缓存模块107,用于将接收到缓存请求的缓存客户端对应的命名空间和实例名与待缓存数据的键进行拼接,并将拼接的结果作为缓存数据对应的拼接键,而后将待缓存数据对应的拼接键及值以键值对的形式缓存至第一目标redis节点。
读取请求接收判断模108,用于判断多个缓存客户端中是否有缓存客户端接收到读取请求,读取请求包括待读取数据的键;
读取节点查找模块109,用于在多个缓存客户端中有缓存客户端接收到读取请求时,根据预定算法获取待读取数据的键对应的第二目标槽,并根据关联信息查找第二目标槽对应的第二目标redis节点;
数据读取模块110,用于将接收到读取请求的缓存客户端对应的命名空间和实例名与待读取数据的键进行拼接,并将拼接的结果作为待读取数据对应的拼接键,而后在第二目标redis节点中读取待读取数据对应的拼接键对应的值。
在本实施例中,缓存节点查找模块包括:
第一二进制数转换模块,用于将待缓存数据的键转换成对应的第一二进制数;
第一CRC处理模块,用于采用CRC算法获取第一二进制数对应的第一校验码;
第一与运算模块,用于将第一校验码与N进行与运算,得到的结果作为第一目标槽的序号;
所述读取节点查找模块包括:
第二二进制数转换模块,用于将待读取数据的键转换成对应的第二二进制数;
第二CRC处理模块,用于采用CRC算法获取第二二进制数对应的第二校验码;
第二与运算模块,用于将第二校验码与N进行与运算,得到的结果作为第二目标槽的序号。
在本实施例中,redis集群中的每一个redis节点均包括一个主缓存服务器和至少一个从缓存服务器。在主缓存服务器的运行过程中,可能因存在故障导致该主缓存服务器停止运行,进而影响对应的缓存数据的读写操作。因此,redis集群需在主缓存服务器出现故障时自动进行维护,以便缓存数据的读写顺利进行,对此,如图4所示,本实施例的分布式缓存装置还包括:
从缓存服务器获取模块111,用于在某主缓存服务器故障时获取故障的主缓存服务器所在的redis节点所包含的各从缓存服务器;
备用主缓存服务器确定模块112,用于从获取的各从缓存服务器中确定一个从缓存服务器作为备用主缓存服务器;
主从切换模块113,用于将备用主缓存服务器替代故障的主缓存服务器,并相应更新备用主缓存服务器和故障的主缓存服务器之间的主从状态。
在本实施例中,如图5所示,上述从备用主缓存服务器确定模块112包括:
请求发送单元1121,用于向从缓存服务器获取模块111获取的各从缓存服务器发送信息请求;
正常从缓存服务器确定单元1122,用于接收从缓存服务器获取模块111获取的各从缓存服务器的反馈信息,并根据反馈信息在从缓存服务器获取模块111获取的各从缓存服务器中确定正常的从缓存服务器;
备用主缓存服务器确定单元1123,用于在所有正常的从缓存服务器中确定备用主缓存服务器。
进一步地,备用主缓存服务器确定单元1123包括:
优先级获取子单元11231,用于获取正常的从缓存服务器中各从缓存服务器对应的优先级;
备用主缓存服务器确定子单元11232,用于根据优先级在正常的从缓存服务器中确定备用主缓存服务器。
实施例三
本实施例还提供一种计算机系统,该计算机系统包括多个计算机设备20,实施例二的分布式缓存装置10的组成部分可分散于不同的计算机设备20中,计算机设备20可以是执行程序的智能手机、平板电脑、笔记本电脑、台式计算机、机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者多个服务器所组成的服务器集群)等。本实施例的计算机设备20至少包括但不限于:可通过系统总线相互通信连接的存储器21、处理器22,如图7所示。需要指出的是,图7仅示出了具有组件21-22的计算机设备20,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
本实施例中,存储器21(即可读存储介质)包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,存储器21可以是计算机设备20的内部存储单元,例如该计算机设备20的硬盘或内存。在另一些实施例中,存储器21也可以是计算机设备20的外部存储设备,例如该计算机设备20上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,存储器21还可以既包括计算机设备20的内部存储单元也包括其外部存储设备。本实施例中,存储器21通常用于存储安装于计算机系统设备的操作系统和各类应用软件,例如实施例二的灰度发布装置的程序代码等。此外,存储器21还可以用于暂时地存储已经输出或者将要输出的各类数据。
处理器22在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器22通常用于控制计算机设备20的总体操作。本实施例中,处理器22用于运行存储器21中存储的程序代码或者处理数据。本实施例计算机系统的多个计算机设备20的处理器22共同执行计算机程序时实现实施例一的分布式缓存方法。
实施例四
本实施例还提供一种计算机可读存储介质,如闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘、服务器、App应用商城等等,其上存储有计算机程序,程序被处理器执行时实现相应功能。本实施例计算机可读存储介质存储实施例二的分布式缓存装置10,被处理器执行时实现实施例一的分布式缓存方法。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种分布式缓存方法,其特征在于,包括以下步骤:
S101,将需要缓存数据的多个缓存客户端分配至若干业务线,并为每条业务线建立一个实例,以使同一业务线中的不同缓存客户端对应同一个实例名;
S102,采用命名空间机制对同一业务线中的不同缓存客户端进行命名,以使同一业务线中的不同缓存客户端对应不同的命名空间;
S103,将每一个所述实例分成N个槽,N为自然数;
S104,将每个所述槽与redis集群中的一个redis节点关联,同时保存各所述槽与关联redis节点的关联信息;
S201,判断所述多个缓存客户端中是否有缓存客户端接收到缓存请求,所述缓存请求包括待缓存数据的键和值,若有,则执行步骤S202;
S202,获取所述待缓存数据的键对应的第一目标槽,并根据保存的所述关联信息查找所述第一目标槽对应的第一目标redis节点;
S203,将接收到所述缓存请求的缓存客户端对应的命名空间和实例名与所述待缓存数据的键进行拼接,并将拼接的结果作为所述待缓存数据对应的拼接键,而后将所述待缓存数据对应的拼接键和值以键值对的形式缓存至所述第一目标redis节点中。
2.根据权利要求1所述的分布式缓存方法,其特征在于,还包括以下步骤:
S301,判断所述多个缓存客户端中是否有缓存客户端接收到读取请求,所述读取请求包括待读取数据的键,若有,则执行步骤S302;
S302,获取所述待读取数据的键对应的第二目标槽,并根据保存的所述关联信息查找所述第二目标槽对应的第二目标redis节点;
S303,将接收到所述读取请求的所述缓存客户端对应的命名空间和实例名与所述待读取数据的键进行拼接,并将拼接的结果作为所述待读取数据对应的拼接键,而后在所述第二目标redis节点中读取所述待读取数据对应的拼接键对应的值。
3.根据权利要求2所述的分布式缓存方法,其特征在于,所述步骤S202采用如下步骤获取所述待缓存数据的键对应的第一目标槽:将所述待缓存数据的键转换成对应的第一二进制数;采用CRC算法获取所述第一二进制数对应的第一校验码;将所述第一校验码与N进行与运算,得到的结果作为所述第一目标槽的序号;
所述步骤S302采用如下步骤获取所述待读取数据的键对应的第二目标槽:将所述待读取数据的键转换成对应的第二二进制数;采用CRC算法获取所述第二二进制数对应的第二校验码;将所述第二校验码与N进行与运算,得到的结果作为所述第二目标槽的序号。
4.根据权利要求1所述的分布式缓存方法,其特征在于,所述redis集群中的每个所述redis节点均包括一个主缓存服务器和至少一个从缓存服务器。
5.根据权利要求4所述的分布式缓存方法,其特征在于,当某个主缓存服务器故障时,执行如下步骤:
S401、获取故障的主缓存服务器所在的redis节点所包含的各从缓存服务器;
S402、从所述步骤S401获取的所述各从缓存服务器中确定一个从缓存服务器作为备用主缓存服务器;
S403、将所述备用主缓存服务器替代所述故障的主缓存服务器,并相应更新所述备用主缓存服务器和所述故障的主缓存服务器之间的主从状态。
6.根据权利要求5所述的分布式缓存方法,其特征在于,所述步骤S402包括:
S421、向所述步骤401获取的所述各从缓存服务器发送信息请求;
S422、接收所述步骤401获取的所述各从缓存服务器的反馈信息,并根据所述反馈信息在所述步骤401获取的所述各从缓存服务器中确定正常的从缓存服务器;
S423、在所述正常的从缓存服务器中确定所述备用主缓存服务器。
7.根据权利要求6所述的分布式缓存方法,其特征在于,所述步骤423包括:
S4231、获取所述正常的从缓存服务器中各从缓存服务器对应的优先级;
S4232、根据所述优先级在所述正常的从缓存服务器中确定所述备用主缓存服务器。
8.一种分布式缓存装置,其特征在于,包括:
实例分配模块,用于将需要缓存数据的多个缓存客户端分配成若干业务线,并为每条业务线建立一个实例,以使同一业务线中的不同缓存客户端对应同一个实例名;
客户端命名模块,用于采用命名空间机制对同一业务线中的不同缓存客户端进行命名,以使同一业务线中的不同缓存客户端对应不同的命名空间;
实例切分模块,用于将每一个所述实例分成N个槽,N为自然数;
节点关联模块,用于将每个所述槽与redis集群中的一个redis节点关联,同时保存各所述槽与关联redis节点的关联信息;
缓存请求接收判断模块,用于判断所述多个缓存客户端中是否有缓存客户端接收到缓存请求,所述缓存请求包括待缓存数据的键和值;
缓存节点查找模块,用于在所述多个缓存客户端中有缓存客户端接收到所述缓存请求时,获取所述待缓存数据的键对应的第一目标槽,并根据保存的所述关联信息查找所述第一目标槽对应的第一目标redis节点;
数据缓存模块,用于将接收到所述缓存请求的所述缓存客户端对应的命名空间和实例名与所述待缓存数据的键进行拼接,并将拼接的结果作为所述缓存数据对应的拼接键,而后将所述待缓存数据对应的拼接键及值以键值对的形式缓存至所述第一目标redis节点。
9.一种计算机系统,其包括多个计算机设备,各计算机设备包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述多个计算机设备的处理器执行所述计算机程序时共同实现权利要求1至7任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910040989.1A CN109714430A (zh) | 2019-01-16 | 2019-01-16 | 分布式缓存方法、装置、计算机系统及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910040989.1A CN109714430A (zh) | 2019-01-16 | 2019-01-16 | 分布式缓存方法、装置、计算机系统及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109714430A true CN109714430A (zh) | 2019-05-03 |
Family
ID=66261520
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910040989.1A Pending CN109714430A (zh) | 2019-01-16 | 2019-01-16 | 分布式缓存方法、装置、计算机系统及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109714430A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111078147A (zh) * | 2019-12-16 | 2020-04-28 | 南京领行科技股份有限公司 | 一种缓存数据的处理方法、装置、设备及存储介质 |
CN113628022A (zh) * | 2021-08-09 | 2021-11-09 | 迈普通信技术股份有限公司 | 一种多层配置的对账方法、装置及计算机可读存储介质 |
CN114172917A (zh) * | 2021-12-01 | 2022-03-11 | 东方财富信息股份有限公司 | 一种分布式缓存系统及其部署的方法 |
CN114281269A (zh) * | 2021-12-31 | 2022-04-05 | 中企云链(北京)金融信息服务有限公司 | 数据缓存方法以及装置、存储介质、电子装置 |
CN114564497A (zh) * | 2020-11-27 | 2022-05-31 | Tcl商用信息科技(惠州)有限责任公司 | 基于nodejs的缓存高可用方法、系统及缓存服务器 |
CN114726923A (zh) * | 2022-05-07 | 2022-07-08 | 中国工商银行股份有限公司 | 服务调用方法及相关装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105159985A (zh) * | 2015-08-31 | 2015-12-16 | 努比亚技术有限公司 | 基于redis集群的数据查询装置及方法 |
CN106209447A (zh) * | 2016-07-07 | 2016-12-07 | 深圳市创梦天地科技有限公司 | 分布式缓存的故障处理方法及装置 |
CN106817402A (zh) * | 2016-11-29 | 2017-06-09 | 上海亿账通互联网科技有限公司 | 缓存数据的处理方法及装置 |
CN107888657A (zh) * | 2017-10-11 | 2018-04-06 | 上海交通大学 | 低延迟分布式存储系统 |
-
2019
- 2019-01-16 CN CN201910040989.1A patent/CN109714430A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105159985A (zh) * | 2015-08-31 | 2015-12-16 | 努比亚技术有限公司 | 基于redis集群的数据查询装置及方法 |
CN106209447A (zh) * | 2016-07-07 | 2016-12-07 | 深圳市创梦天地科技有限公司 | 分布式缓存的故障处理方法及装置 |
CN106817402A (zh) * | 2016-11-29 | 2017-06-09 | 上海亿账通互联网科技有限公司 | 缓存数据的处理方法及装置 |
CN107888657A (zh) * | 2017-10-11 | 2018-04-06 | 上海交通大学 | 低延迟分布式存储系统 |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111078147A (zh) * | 2019-12-16 | 2020-04-28 | 南京领行科技股份有限公司 | 一种缓存数据的处理方法、装置、设备及存储介质 |
CN111078147B (zh) * | 2019-12-16 | 2022-06-28 | 南京领行科技股份有限公司 | 一种缓存数据的处理方法、装置、设备及存储介质 |
CN114564497A (zh) * | 2020-11-27 | 2022-05-31 | Tcl商用信息科技(惠州)有限责任公司 | 基于nodejs的缓存高可用方法、系统及缓存服务器 |
CN113628022A (zh) * | 2021-08-09 | 2021-11-09 | 迈普通信技术股份有限公司 | 一种多层配置的对账方法、装置及计算机可读存储介质 |
CN113628022B (zh) * | 2021-08-09 | 2023-12-22 | 迈普通信技术股份有限公司 | 一种多层配置的对账方法、装置及计算机可读存储介质 |
CN114172917A (zh) * | 2021-12-01 | 2022-03-11 | 东方财富信息股份有限公司 | 一种分布式缓存系统及其部署的方法 |
CN114172917B (zh) * | 2021-12-01 | 2023-06-09 | 东方财富信息股份有限公司 | 一种分布式缓存系统及其部署的方法 |
CN114281269A (zh) * | 2021-12-31 | 2022-04-05 | 中企云链(北京)金融信息服务有限公司 | 数据缓存方法以及装置、存储介质、电子装置 |
CN114281269B (zh) * | 2021-12-31 | 2023-08-15 | 中企云链(北京)金融信息服务有限公司 | 数据缓存方法以及装置、存储介质、电子装置 |
CN114726923A (zh) * | 2022-05-07 | 2022-07-08 | 中国工商银行股份有限公司 | 服务调用方法及相关装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109714430A (zh) | 分布式缓存方法、装置、计算机系统及存储介质 | |
US11570255B2 (en) | SMB2 scaleout | |
US9460185B2 (en) | Storage device selection for database partition replicas | |
US9069835B2 (en) | Organizing data in a distributed storage system | |
US9350682B1 (en) | Compute instance migrations across availability zones of a provider network | |
US10528527B2 (en) | File management in thin provisioning storage environments | |
CN108063813B (zh) | 一种集群环境下密码服务网络并行化的方法与系统 | |
CN103248667B (zh) | 一种分布式系统的资源访问方法和系统 | |
CN112836152B (zh) | 页面渲染方法、系统、计算机设备及计算机可读存储介质 | |
CN108762668B (zh) | 一种处理写入冲突的方法及装置 | |
EP2248311A1 (en) | Method and system for message delivery in messaging networks | |
US20100332532A1 (en) | Distributed directory environment using clustered ldap servers | |
US10929041B1 (en) | Block-storage service supporting multi-attach | |
CN104468150A (zh) | 一种虚拟主机实现故障迁移的方法及虚拟主机业务装置 | |
CN105468302A (zh) | 一种处理数据的方法、装置及系统 | |
CN112882647A (zh) | 存储和访问数据的方法、电子设备和计算机程序产品 | |
US20230022729A1 (en) | Block-storage service supporting multi-attach and health check failover mechanism | |
US11178197B2 (en) | Idempotent processing of data streams | |
CN111651286A (zh) | 数据通信方法、装置及计算设备、存储介质 | |
US8019729B2 (en) | System and method for updating file | |
CN111444148B (zh) | 基于MapReduce的数据传输方法和装置 | |
US20220129303A1 (en) | Managing failures in edge computing environments | |
CN113347238A (zh) | 基于区块链的消息分区方法及系统、设备、存储介质 | |
CN109992447B (zh) | 数据复制方法、装置及存储介质 | |
US10628242B1 (en) | Message stream processor microbatching |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
AD01 | Patent right deemed abandoned | ||
AD01 | Patent right deemed abandoned |
Effective date of abandoning: 20231215 |