侧边栏壁纸
博主头像
月伴飞鱼 博主等级

行动起来,活在当下

  • 累计撰写 39 篇文章
  • 累计创建 25 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

Redis槽位是如何分配的?分配算法是什么样子的?

月伴飞鱼
2025-03-08 / 0 评论 / 2 点赞 / 5 阅读 / 0 字
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Redis 分配槽位的过程主要用于 Redis Cluster 模式下的数据分布。

在 Redis Cluster 中,数据被分配到不同的节点上,每个节点处理一定范围的槽(slot)。

Redis 集群将键(key)映射到 16384 个槽位(slots)中,槽位的分配和数据的分配有一个明确的算法。

Redis Slot 分配概述

  1. 槽位总数: Redis Cluster 将 16384 个槽位平均分配给不同的 Redis 节点。每个槽位是一个整数,范围从 0 到 16383。

  2. 哈希槽: Redis 会根据键(key)计算哈希值,并通过哈希算法将该值映射到一个槽位。槽位的数量固定为 16384,所以 Redis 会使用取模的方式来映射键。

  3. 分布式哈希槽: 在 Redis 集群模式下,槽位是通过一致性哈希分配的。每个节点负责一部分槽,Redis 会通过不同的算法来决定哪个键值对分配到哪个槽位,进而决定数据存储在哪个节点上。

分配算法

Redis 使用 CRC16 哈希算法 将键映射到 16384 个槽位中。具体过程如下:

  1. 计算 CRC16 哈希值: 对于一个键(key),Redis 会使用 CRC16 算法来计算哈希值。CRC16 是一种常用的哈希算法,输出结果为一个 16 位的整数。

  2. 映射槽位: Redis 使用 hash % 16384 来计算槽位编号。也就是说,哈希值经过 16384 取模操作后,得到的结果是一个介于 0 到 16383 之间的整数,这个整数即为该键所属的槽位编号。

  3. 槽位与节点的映射: Redis Cluster 将这些槽位分配给不同的节点,初始时,Redis Cluster 会平均将 16384 个槽位分配给各个节点。如果集群中有 N 个节点,每个节点会负责大约 16384 / N 个槽位。

具体流程

  1. 哈希槽的计算:

    • 假设键是 "user:1234",Redis 会计算它的 CRC16 哈希值,并对 16384 取模,得到一个槽位编号。

    • 比如,假设计算结果是 hash("user:1234") = 12345678,那么该键会被映射到槽位:12345678 % 16384 = 1234

  2. 槽位分配到节点:

    • Redis 集群中的每个节点负责一部分槽位。假设有 3 个节点(Node 1, Node 2, Node 3),那么它们分别负责槽位的一个子集。

    • 节点的分配是动态的,可以根据需要重新平衡槽位。例如,假设 Node 1 负责槽位 0 到 4095,Node 2 负责槽位 4096 到 8191,Node 3 负责槽位 8192 到 16383。

    • 根据槽位的哈希结果,键 "user:1234" 会被分配到某个节点。例如,如果槽位 1234 由 Node 1 负责,那么该键会存储在 Node 1 上。

  3. 数据迁移与重新分配:

    • 当集群扩容或缩容时,Redis 会重新分配槽位,原先的键会迁移到新的节点上。为了保证数据的均衡分布,Redis 会通过迁移槽位的方式将数据从一个节点迁移到另一个节点。

    • 数据迁移通常通过 集群重分片 来实现。

Slot 分配的核心点

  • 固定槽位数量: Redis 集群中的槽位总数固定为 16384,槽位数不受节点数量的影响。

  • 均匀分配: 初始时,槽位会均匀地分配给各个节点,尽量避免某个节点过载。

  • 键的哈希计算: 键的哈希值通过 CRC16 算法计算,且经过 16384 取模来确定具体槽位。

  • 动态迁移: 在集群扩容或节点故障恢复时,Redis 会动态地迁移槽位,从而确保数据分布的均匀性。

小结

Redis 使用 CRC16 哈希算法 将键映射到 16384 个槽位上,然后将槽位均匀地分配给不同的节点。

通过这种方式,数据在集群中的分布能够保持均衡。随着节点的加入或移除,Redis 会动态地迁移槽位,确保集群的负载均衡。

公众号.png

2
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin
    1. 支付宝打赏

      qrcode alipay
    2. 微信打赏

      qrcode weixin
博主关闭了所有页面的评论