redis自学(37)散列插槽

散列插槽

Redis会把每一个master节点映射到0~1638316284个插槽(hash slot)上,查看集群信息时就能看到:

 

 

数据key不是与节点绑定,而是与插槽绑定。Reids会根据key的有效部分计算插槽值,分两种情况:

Key中包含“{}”,且“{}”中至少包含1个字符,“{}”中的部分是有效部分

Key中不包含“{}”,整个key都是有效部分

例如:keynum,那么就根据num计算,如果是{itcast}num,则根据itcast计算。计算方式是利用CRC16算法得到一个hash值,然后对16384取余,得到的结果就是slot值。

为什么要跟插槽绑定而不是跟节点绑定?因为reids的主节点可能会出现宕机的情况,或者是集群扩容增加了节点,或者是集群伸缩删除了节点。节点删除或者宕机了,数据也就跟着丢了,而跟插槽绑定,节点宕机了,可以将插槽绑定到活着的节点上,集群扩容时,也可以将插槽进行转移。

验证:

 

 

Set a的时候,就重定向到了15495插槽所在的7003上了

 

 

Get num又重定向到了2765插槽所在的7001

 

 

posted @ 2024-04-17 16:29  蓝海的bug本  阅读(42)  评论(0编辑  收藏  举报