问题引入:在搭建了redis的分片集群后,我们会面对这样一个问题,当我们写数据时,比如set num 666,这个num值将会存在哪个master上呢?当要get的时候我们又怎么查询呢?
这里我们需要先了解一个概念:key的有效部分。假设一个key是{abc}def,那么这个key的有效部分就是abc。
Redis会把每一个master节点映射到0-16383一共16384个插槽(hash slot)上,(假如是三个master节点,那么这16384个插槽就平均分给这三个master)数据key与这些插槽绑定起来,如何进行映射就是用到刚才说到的key的有效部分,根据CRC16算法得到这个key的hash值,用这个hash值对16384取余,得到slot值,就对应某个某个插槽。
如果你想将同一类数据存放在同一个master中,那就可以让他们的key有相同的有效部分