集群分区设计

哈希取模分区

使用特点的数据,再根据节点数量取模,决定映射到哪个节点上。

缺点

  • 当数据扩容或收缩时,数据节点的映射关系需要重新计算,会导致数据的重新迁移

一致性哈希分区

为系统中每个节点分配一个token,范围一般在0~2^32,这些token构成一个哈希环。当要根据某个key查找对应的节点时,先根据key计算哈希值,然后顺时针找到第一个token大于等于该哈希值的节点。

img

优点

  • 添加或删除节点时,只影响哈希环中相邻节点,对其他节点无影响

哈希槽分区

Redis集群采用哈希槽分区实现。在Redis的每个节点上都会存储哈希槽信息。根据这些信息,可以找到每个节点负责的哈希槽,进而找到数据所在的节点。当我们提供一个key时,redis会根据CRC16的算法算出一个结果,然后把结果除以16384求余数,这样每个关键词都会对应一个编号为0-16384的哈希槽,通过这个值找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。