一、槽介绍

  • Redis集群通过分片的方式来保存数据库中的键值对:集群的整个数据库被分为16384个槽(slot),数据库中的每个键都属于这16384个槽的其中一个,集群中的每个节点可以处理0个或最多16384个槽

二、集群的上线、下线状态


  • 当数据库中的16384个槽都有节点在处理时,集群处于上线状态(ok);相反地,如果数据库中有任何一个槽没有得到处理,那么集群处于下线状态(fail)
  • 例如,在前面的文章中 我们使用CLUSTER MEET命令将7000、7001、7002三个节点连接到了同一个 集群里面,不过这个集群目前仍然处于下线状态,因为集群中的三个节点都没有在处理任何 槽:

Redis(设计与实现):51---集群之槽介绍、槽分配(CLUSTER ADDSLOTS命令)_保存数据

三、槽分配(CLUSTER ADDSLOTS命令)

  • 通过向节点发送CLUSTER ADDSLOTS命令,我们可以将一个或多个槽指派(assign)给节点负责:
CLUSTER ADDSLOTS <slot> [slot ...]


演示案例

  • 举个例子,执行以下命令可以将槽0至槽5000指派给节点7000负责:

Redis(设计与实现):51---集群之槽介绍、槽分配(CLUSTER ADDSLOTS命令)_数据库_02

  • 为了让7000、7001、7002三个节点所在的集群进入上线状态,我们继续执行以下命令, 将槽5001至槽10000指派给节点7001负责:

Redis(设计与实现):51---集群之槽介绍、槽分配(CLUSTER ADDSLOTS命令)_CLUSTER ADDSLOTS命令_03

  • 然后将槽10001至槽16383指派给7002负责:

Redis(设计与实现):51---集群之槽介绍、槽分配(CLUSTER ADDSLOTS命令)_槽分配_04

  • 当以上三个CLUSTER ADDSLOTS命令都执行完毕之后,数据库中的16384个槽都已经被 指派给了相应的节点,集群进入上线状态:

Redis(设计与实现):51---集群之槽介绍、槽分配(CLUSTER ADDSLOTS命令)_数据库_05