redis自学(37)散列插槽
散列插槽
Redis会把每一个master节点映射到0~16383共16284个插槽(hash slot)上,查看集群信息时就能看到:
数据key不是与节点绑定,而是与插槽绑定。Reids会根据key的有效部分计算插槽值,分两种情况:
l Key中包含“{}”,且“{}”中至少包含1个字符,“{}”中的部分是有效部分
l Key中不包含“{}”,整个key都是有效部分
例如:key是num,那么就根据num计算,如果是{itcast}num,则根据itcast计算。计算方式是利用CRC16算法得到一个hash值,然后对16384取余,得到的结果就是slot值。
为什么要跟插槽绑定而不是跟节点绑定?因为reids的主节点可能会出现宕机的情况,或者是集群扩容增加了节点,或者是集群伸缩删除了节点。节点删除或者宕机了,数据也就跟着丢了,而跟插槽绑定,节点宕机了,可以将插槽绑定到活着的节点上,集群扩容时,也可以将插槽进行转移。
验证:
Set a的时候,就重定向到了15495插槽所在的7003上了
Get num又重定向到了2765插槽所在的7001上