redis集群数据结构
clusterNode结构保存了一个节点的状态,比如节点的创建时间,名称。负责处理哪些槽(槽是redis集群的一个最重要的一个概念,后边会讲到)

clusterLink结构保存了连接节点所需要的信息,比如套接字描述符,输入缓存区和输出缓冲区,主要是用于连接其他节点。

每个节点都保存着一个clusterState结构。这个结构记录了在当前结点的视角下,集群的状态,集群所包含的节点等信息
槽指派
redis 集群通过分片的方式保存数据库中的键值对:集群的整个数据库被分为16384个槽(slot),数据库中每个键都属于这16384个槽的其中一个,集群中的每个节点负责0个或者最多16384个槽。
怎么计算键key属于哪个槽?
节点使用以下方法计算给定的键key属于哪个槽:CRC16(key) & 16383 CRC16(key) 计算键key的CRC16校验和。& 16383 计算出一个0至16383之间的整数作为key的槽号。
节点收到一些命令的时候怎么高效判断这个key是否应该由自己处理或者该有其他节点去处理?
首先集群中每个节点会处理部分槽,所有节点处理完一共16384个槽。节点之间会互相传播槽指派信息。

本文介绍了Redis集群的数据结构,重点解析了哈希槽的概念。每个节点负责一定数量的槽,通过CRC16(key) & 16383的计算方式确定键所属的槽。当节点收到命令时,能快速判断处理节点,若槽正在迁移则返回ASK错误。此外,还讨论了重新分片的过程,允许在线迁移槽而不影响服务。
610

被折叠的 条评论
为什么被折叠?



