Redis Cluster架构之哈希槽机制

键空间与物理节点的映射

这里的键空间是键值对的键,Redis中数据以键值对的形式存储的,那么键空间和物理节点之间是如何建立映射的呢?
Redis Cluster并没有采用将键直接映射到物理节点,而是引入了一个固定的、逻辑上的中间层——虚拟哈希槽。
映射关系转化为:键值 ——>CRC16(key) &16384——> 哈希槽 ——>Slot-to-Node Map——> 物理节点。

虚拟哈希槽

Redis Cluster 将整个键空间划分为一个固定数量的虚拟单元,即 16,384 个哈希槽。

哈希槽的好处

传统的直接映射方案中,键与物理节点直接绑定,当节点增减时,需要重新计算大量键的归属,导致数据迁移逻辑复杂且难以管理。
Redis Cluster 将键映射到逻辑上的“槽”,再将这些槽映射到物理节点。这种键 -> 槽 -> 节点的两层映射结构,极大地解耦了数据与物理拓扑,使得集群管理,尤其是节点的增删变得异常简洁和灵活。

键到槽的映射

客户端操作一个键的时候,首先在本地计算该键的哈希槽,然后在本地缓存查询槽位映射表,接着就能向该槽位所在的节点发送命令。
优势是 避免了向随机节点发送请求,再由服务器进行转发的额外开销。

槽到物理节点的映射

得到键所属的哈希槽后,下一个问题就是这个槽在哪个物理节点上。槽和节点直接的映射关系会保存在每个节点中,节点之间通过** Gossip 协议持续交换各自的状态信息,包括它们所负责的槽位配置,从而确保最终**所有节点对集群的拓扑视图达成一致 。
9c66ef5c-d471-4670-9f32-b472c457db01

哈希槽和一致性哈希的对比

  • 一致性哈希是将键空间和物理节点都映射到哈希环上。键的计算的哈希值映射到哈希环上,同时沿圆环顺时针方向查找,遇到的第一台服务器就是所对应的处理请求服务器。当增删节点时,只会影响到该节点在环上的直接邻居,从而最大限度地减少了需要迁移的键的数量

  • 而哈希槽的设计则是更为结构化和易于管理的数据重平衡方法,它将数据迁移的复杂性从核心哈希算法中剥离出来,转化为一个明确的、由工具驱动的运维流程。这种设计选择体现了对运维实用主义和可控性的偏好

posted @ 2025-10-20 11:36  浪矢-CL  阅读(1)  评论(0)    收藏  举报