哈希槽分区

背景

  • redis 配置集群就是使用的 哈希槽分区

alt



目的

  • 为了解决一致性哈希算法的数据倾斜问题,解决数据均匀分配,在数据和节点之间又加入一层,把这层称为哈希槽(slot),用于管理数据和节点之间的关系。
  • 哈希槽实质就是一个数组,数组[0, 2^14-1]形成hash slot空间。

alt



过程

  • redis 集群中内置了16384个槽(2^14-1),redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。集群会记录节点和槽的对应关系。
  • 之后对 key 进行运算 slot = CRC16(key) % 16384。key 通过 CRC16 算法校验后,对16384取模,映射到对应的节点上。
  • CRC 算法产生的 hash 值有16bit,可以产生2^16 = 65536个值


好处

  • 扩大了粒度,便于数据移动


问题

为什么 redis 集群槽只有16384,而不是65536?

  • antirez redis之父解答
  • 如果槽位是65536,发送心跳信息 ping 的信息头达8kb,发送的心跳包过与庞大
  • redis 作者不建议 redis cluster 节点数量超过 1000个。因为节点越多,心跳包的消息体内携带的数据越多,可能会导致网络拥堵
  • 槽位越小,节点少的情况下,压缩比高,容器传输


hshuo的面试之路 文章被收录于专栏

作者目标是找到一份Java后端方向的工作 此专栏用来记录从Bilibili、书本、其他优质博客上面学习的内容 用于巩固、总结内容 主要包含Docker、Dubbo、Java基础、JUC、Maven、MySQL、Redis、SpringBoot、SpringCloud、数据结构、杂文、算法、计算机网络、操作系统、设计模式等相关内容

全部评论

相关推荐

09-29 17:44
已编辑
蔚来_测(准入职员工)
//鲨鱼辣椒:见不了了我实习了四个月上周再投筛选了一天就给我挂了
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务