Redis:为什么要转移给另一位大师

时间:2018-02-22 10:53:47

标签: redis redis-cluster

我是一个Redis集群 - 3个主人和3个奴隶。该群集包含~300个键(foo0 - foo300)。据我所知,每个主服务器负责某些数据子集,并且可以将客户端重定向到具有MOVED错误的正确节点。

但是,如果我向主人发送GET 不存在键(例如 klsdkaso qwerty123 ...)的请求,我也获得了MOVED到另一个节点。我很困惑。谁可以解释为什么这样?

2 个答案:

答案 0 :(得分:3)

为了说清楚,让我们定义两种主节点:

  1. 已连接节点:客户端连接到的节点,您正在向此节点发送GET命令。
  2. 目标节点:找到给定密钥应该的节点,即您重定向或移动到的节点。
  3. 因为已连接节点仅包含广告位映射信息,即给定密钥应该位于目标节点上。但是,不会知道目标节点上是否存在给定密钥。

    因此已连接节点必须首先将客户端重定向到目标节点,即使用MOVED错误消息提供有关IP和端口的信息目标节点。然后,客户端向目标节点发送另一个GET命令,以检查给定密钥是否确实存在。

答案 1 :(得分:3)

密钥,无论它是否实际存在,都是通过将其名称(或其部分,a.k.a标记)散列到一个槽来映射的。将插槽分配给主人,并且主人首先检查关键字"归属"它(根据当前的时隙范围分配),然后才执行任何其他操作。