• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Redis3.0集群crc16算法php客户端实现方法(php获得redis3.0集群中redis数据所在的redis分区插槽,并根据分区插槽取得分区所在redis服务器地址)

php 搞代码 3年前 (2022-01-24) 21次浏览 已收录 0个评论

Redis3.0集群crc16算法php客户端实现方法(php取得redis3.0集群中redis数据所在的redis分区插槽,并根据分区插槽取得分区所在redis服务器地址)

数据分区

Redis集群将数据分区后存储在多个节点上,即不同的分区存储在不同的节点上,每个节点可以存储多个分区。每个分区在Redis中也被称为“hash slot”,Redis集群中总共规划了16384个分区。

例如:当集群中有3个节点时,节点A将包含0-5460分区,节点B将包含5461-10922分区,节点C将包含10923-16383分区。

每个key将会存储到一个唯一的分区中,每个分区其实就是一组key的集合,两者对应关系为:key的CRC16校验码%16384=hash slot(分区标记).可见Redis并没有像Memecache一样使用一致性哈希。社区说采用此规则的key分布是相当的均匀,在我们的测试中也印证了这一点。

在Redis集群中添加或者移除一个节点时相当容易的事情。例如:添加新节点D时,需要做的只是从A、B、C节点中移动一些分区给D。类似的,移除A时,只需将原属A的分区移动给B和C,等A变空时移除即可。

节点间的分区移动不需要停止服务,所以添加节点、移除节点或者改变节点的分区数量不需要停止集群服务。

客户端访问集群时,理论上可以访问集群中的任一节点。此时,被访问的数据可能不存在于被访问的节点中,但是被访问节点能自动获知目标节点,并重定向客户端的访问,即将目标节点地址返回给客户端,客户端再次发起访问请求。当然,好的客户端工具应该实现数据分区和节点对应关系的缓存,并在对应关系发生改变时能自动更新。目前,包括Jedis在内的几个客户端工具已经实现了此功能。

CRC概念

CRC基本原理不懂的,请移步维基百科:循环冗余检验码

通常根据CRC校验码的位数(也等于生成多项式【G(x)】最高的幂次)的不同来区分不同的CRC算法,如CRC-1、CRC-8、CRC-16等。幂次相同的情况下,不同的标准也有不同的CRC算法。比如G(x)最高次幂为16的时候有:CRC-(本文来)源gaodaimacom搞#^代%!码&网(

搞gaodaima代码

16-CCITT、CRC-16-IBM等。Redis使用的是CRC-16-CCITT标准,即G(x)为:x16 + x12 + x5 + 1 。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Redis3.0集群crc16算法php客户端实现方法(php获得redis3.0集群中redis数据所在的redis分区插槽,并根据分区插槽取得分区所在redis服务器地址)

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址