我有一个 Redis 集群 - 3 个主节点和 3 个从节点。该集群包含约 300 个 key (foo0 - foo300)。我知道每个 master 负责特定的数据子集,并且可以将客户端重定向到正确的节点并出现 MOVED 错误。
但是,如果我向 master 发送请求以获取 不存在的 key (如 klsdkaso、qwerty123 ...),我也会被移动到另一个节点。我很困惑。谁能解释为什么会这样?
最佳答案
为了说的清楚,我们定义两种主节点:
- Connected Node:您的客户端连接到的节点,您正在向该节点发送
GET
命令。 - 目标节点:给定键应该所在的节点,即您被重定向或移动到的节点。
因为 Connected Node 只有槽映射信息,即给定的键应该位于Destination Node。但是,它不知道目标节点上是否存在给定 key 。
因此Connected Node 必须首先将客户端重定向到Destination Node,即使用MOVED
错误消息来提供IP 和目标节点上的端口信息。然后客户端发送另一个 GET
命令到 Destination Node 以检查给定的 key 是否真的存在。
关于Redis:为什么移动到另一个主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48925602/