目录
Redis集群的工作原理
Redis集群通过分片(sharding)实现数据分布,每个节点存储部分数据。集群由多个节点组成,每个节点负责一部分哈希槽(hash slot),共有16384个槽。数据根据键的哈希值分配到相应的槽中,每个槽对应一个节点。
Gossip协议
Gossip协议用于节点间的通信,确保集群状态一致。节点通过随机选择其他节点交换信息,传播集群状态(如节点加入、退出、故障等)。这种去中心化的通信方式具有高容错性和可扩展性。
写和读的流程
-
写流程:
-
客户端计算键的哈希值,确定对应的哈希槽。
-
客户端将写请求发送到负责该槽的节点。
-
节点处理写请求并返回结果。
-
-
读流程:
-
客户端计算键的哈希值,确定对应的哈希槽。
-
客户端将读请求发送到负责该槽的节点。
-
节点处理读请求并返回数据。
-
CRC16再取余的计算位置
CRC16再取余的计算在客户端进行。客户端使用CRC16算法计算键的哈希值,再对16384取余,确定键对应的哈希槽,然后找到负责该槽的节点并发送请求。
决定key放在哪个节点
键的存放位置由CRC16哈希值决定,客户端无法直接指定。但可以通过以下方式间接控制:
-
哈希标签:使用
{}指定部分键参与哈希计算,如{user123}.profile和{user123}.settings会被分配到同一节点。 -
手动分片:在应用层预先计算哈希值,确保某些键分配到特定节点。
总结
Redis集群通过分片和Gossip协议实现数据分布和节点通信。客户端负责计算键的哈希槽,无法直接指定键的存放节点,但可以通过哈希标签或手动分片间接控制。

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



