面试题答案
一键面试Redis Cluster分片机制工作原理
- 数据在节点间分布
- 哈希槽(Hash Slot):Redis Cluster采用哈希槽的概念来分配数据。整个键空间被分为16384个哈希槽。当写入数据时,首先根据键计算CRC16值,然后对16384取模,得到的结果就是该键应该被分配到的哈希槽编号。例如,键“key1”,计算CRC16(“key1”) % 16384,得出哈希槽编号。每个节点负责一部分哈希槽,通过这种方式将数据分散存储在不同节点上。
- 节点协作进行数据存储和检索
- 数据存储:当客户端写入数据时,它并不关心具体哪个节点存储数据。客户端计算出数据对应的哈希槽编号,然后向负责该哈希槽的节点发送写入请求。如果客户端连接的节点不是负责该哈希槽的节点,该节点会返回MOVED错误,告知客户端应该连接的正确节点,客户端再向正确节点重新发送请求完成数据存储。
- 数据检索:与数据存储类似,客户端计算出键对应的哈希槽编号,向负责该哈希槽的节点发送读取请求。若当前连接节点不是负责该哈希槽的节点,同样会收到MOVED错误,然后重定向到正确节点进行数据检索。
- 节点协作:节点之间通过Gossip协议交换状态信息,包括节点的存在性、负责的哈希槽等。这样节点之间能够互相知晓整个集群的状态,从而在数据存储和检索过程中进行正确的协作。当集群拓扑发生变化(如节点加入、离开或故障)时,通过重新分配哈希槽,节点间协作完成数据的重新分布,保证数据的可用性和一致性。