Redis集群提高了Redis的可扩展性,Redis的集群方案主要有Redis Cluster和Codis。
Redis Cluster
Redis Cluster是Redis官方提供的去中心化集群方案,通过分片来进行数据共享,并提供复制和故障转移功能。
Redis Cluster如何分片?
Redis集群通过分片的方式来保存数据库中的键值对。集群的整个数据库被分为16384个槽,数据库中的每个键都属于这16384个槽的其中一个,集群中的每个节点可以负责0~16384个槽。
当数据库中的16384个槽都有节点在处理时,集群处于上线状态;如果有任何一个槽没有节点处理时,集群处于下线状态。
槽指派命令
通过向节点发送cluster addslots命令可以将一个或多个槽指派给该节点。
如何维护槽信息?
每个节点的clusterNode结构slots属性和numslot属性记录节点负责的槽信息。
clusterNode.slots是一个二进制数组,长度为16384/8=2048字节,共包含16384个二进制位。Redis对clusterNode.slots数组中的16384个二进制位进行编号,根据索引i上的二进制位值来判断节点负责哪些槽(二进制位值=1,表示节点负责处理槽i)。
clusterNode.numslot记录该节点负责的槽数量。
节点之间如何共享槽指派信息?
集群中的每个节点都知道16384个槽都分别被指