Redis Cluster模式为了解决单机Redis容量有限的问题,将数据按一定的规则分配到多台机器,内存/QPS不受限于单机,可受益于分布式集群高扩展性。
Redis Cluster采用虚拟哈希槽分区而非一致性hash算法,预先分配16384(2^14)个卡槽,所有的键根据哈希函数映射到 0 ~ 16383整数槽内,每一个分区内的master节点负责维护一部分槽以及槽所映射的键值数据。
具体而言,客户端在发送请求之前,会根据键的哈希值计算出一个槽(slot),然后将请求发送到负责该槽的节点。
计算公式:slot = CRC16(key) & 16383
具体的路由过程如下:
1. 客户端根据键的哈希值计算出一个槽(slot),槽的范围是0-16383。
2. 客户端通过集群的内部映射表(cluster map)查找负责该槽的节点。
3. 如果客户端连接的是集群中的某个节点,该节点会直接处理请求,并返回结果。
4. 如果客户端连接的不是负责该槽的节点,则该节点会返回一个MOVED错误,指示客户端重新发送请求到正确的节点。
5. 客户端根据MOVED错误中包含的信息,重新发送请求到正确的节点。
通过这种方式,Redis Cluster实现了请求的正确路由,确保每个键值对都能够被正确地处理。这种路由方式还允许集群在节点故障或新节点加入时进行自动的槽重分配,从而实现负载均衡和高可用性。