redis槽道原理

redis-cluster槽道的原理:

 

本文配图是为了便于理解,如果图片影响了您的阅读,翻到博客末尾,笔者copy了无图版

 

1 redis服务如何判断key对应的槽道号,是否由本节点管理?

 

每一个节点都有一个属于自己的16384位的二进制位序列,每一位对应一个槽道号,当该二进制序列的某一位为1时,代表当前结点对该槽道号具有管理权。(下图表示,当前结点对槽道:0  2 3 4 .... 16383具有管理权:)

 

当客户端通过某一结点(比如8000)向cluster(集群)(下图表示一个集群,redis-cli的意思是登陆redis客户端:)

中set key value 时(该例中name为key,zhangsan为value):

该结点就会通过hash取模算法将key值计算成某一个在[0,16383]区间内的值,这个值就是槽道号,这个时候当前结点拿着这个槽道号去自己的二进制序列中去比对,如果该槽道号对应的二进制序列中的那一位为1,则直接将该键值对存储到当前节点中,如果对应的二进制为0,见第二题答案

2 判断不归本节点管理时,获取正确的管理者信息?

 

集群中的每一个节点不仅拥有一个属于自己的二进制位序列用来表示槽道号,而且还有一个公有的大家都一样的由16384个元素组成的索引数组,跟上面的字符数组一样,还是每一位对应一个槽道号,但是数组中存储的信息是该槽道号的实际管理者。

也就是说,当某一个结点收到 set key value 请求时,首先查看自己私有的二进制位序列,判断该key对应的槽道号是否归属自己管理,如果不归自己管理,则查看公有的大家都是一样内容的索引数组,根据槽道号找到找到该槽道号真正的管理者,并将信息转交给其真正的管理者进行保存。

 

————————————————————————————————————————————————————

无图版

 

槽道的原理:

1 redis服务如何判断key对应的槽道号,是否由本节点管理?

每一个节点都有一个属于自己的16384位的二进制位序列,每一位对应一个槽道号,当该二进制序列的某一位为1时,代表当前结点对该槽道号具有管理权。

当客户端通过某一结点(比如8000)向cluster(集群)中set key value 时(该例中name为key,zhangsan为value),该结点就会通过hash取模算法将key值计算成某一个在[0,16383]区间内的值,这个值就是槽道号,这个时候当前结点拿着这个槽道号去自己的二进制序列中去比对,如果该槽道号对应的二进制序列中的那一位为1,则直接将该键值对存储到当前节点中,如果对应的二进制为0,见第二题答案

 

2 判断不归本节点管理时,获取正确的管理者信息?

集群中的每一个节点不仅拥有一个属于自己的二进制位序列用来表示槽道号,而且还有一个公有的大家都一样的由16384个元素组成的索引数组,跟上面的字符数组一样,还是每一位对应一个槽道号,但是数组中存储的信息是该槽道号的实际管理者。

也就是说,当某一个结点收到 set key value 请求时,首先查看自己私有的二进制位序列,判断该key对应的槽道号是否归属自己管理,如果不归自己管理,则查看公有的大家都是一样内容的索引数组,根据槽道号找到找到该槽道号真正的管理者。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值