我已经从redis网站上阅读了文档,这就是它描述分片的方式:
'
Redis群集中有16384个哈希槽,要计算给定密钥的哈希槽,我们只需对密钥的CRC16取模16384。
Redis群集中的每个节点都负责哈希槽的子集,因此,例如,您可能有一个包含3个节点的群集,其中:
节点A包含从0到5500的哈希槽。 节点B包含从5501到11000的哈希槽。 节点C包含从11001到16383的哈希槽。 这样可以轻松添加和删除集群中的节点。 例如,如果要添加新节点D,则需要将一些哈希槽从节点A,B,C移至D。类似地,如果要从群集中删除节点A,则可以移动 。当节点A为空时,我可以将其完全从群集中删除。
'
首先,我加粗了令我困惑的地方。添加节点时,redis要求重新放入A,B,C中的现有密钥并将其分配到A,B,C,D中。
此重新分配操作如何工作?似乎并不容易,尤其是在服务仍在运行时。您的分片操作不应影响您的运行工作。