• 【哈希槽算法】概念、对比、优点、举例理解_Redis07


    1、hash槽是什么?
    • 首先说明,普通hash、一致性hash(圆环hash)、哈希槽算法,他们是不一样的。
      • 1.普通hash取模法:是对服务器的数量进行取模
      • 2.一致性Hash算法:是对2^32取模,一致性Hash算法将整个哈希值空间组织成一个虚拟的圆环,将各个服务器进行hash处理得到一个哈希每台机器就能确定其在哈希环上的位置
      • 3.哈希槽算法:Redis Cluser采用虚拟槽分区所有的键根据哈希函数映射到0~16383个整数槽内
        • 哈希槽计算公式:slot=CRC16(key)& 16384。集群中的每个键都属于这16384个哈希槽中的一个
    2、普通哈希算法和hash槽算法对比:
    • 1)当业务量突然增加,现有服务器不够用。增加服务器节点后,如果通过常用的hash取模算法:

      • 增加服务器节点后普通hash取模,hash(key)%(N+1) 做数据分片和分发时,由于节点数量发生变化,导致之前的key 会被分发到其他的服务器上导致大量的数据失效,需要重新写(set)Redis 服务器。
      • 某个服务器挂了:如果不做及时的修复,大量被分发到此服务器请求都会失效
    • 2)Redis Cluster在设计中没有使用一致性哈希,而是使用数据分片引入哈希槽(hash slot)来实现(好处):

      • 1.控制节点请求负载按照槽来进行分片,通过为每个节点指派不同数量的槽,可以控制不同节点负载的数据量和请求数。
      • 2.尽量保证不丢失数据:可以保证最大程度的不丢失数据因为没有做数据迁移
      • 3.易增删节点方便添加或者删除节点
      • 4.数据均匀:由于采用高质量的哈希算法每个槽所映射的数据通常比较均匀
    • 3)举例:假如当前集群有3个节点,槽默认是平均分的:

      • 节点 A (6381)包含 0 到 5499号哈希槽。
      • 节点 B (6382)包含5500 到 10999 号哈希槽。
      • 节点 C (6383)包含11000 到 16383号哈希槽。
      • 这种结构很方便添加或者删除节点,比如如果我想新添加个节点D,,我需要从节点 A、B、C中得部分槽到D上。
      • 如果我像移除节点A,需要将A中得槽移到B和C节点上,然后将没有任何槽的A节点从集群中移除即可。
      • 由于哈希槽从一个节点将移动到另一个节点并不会停止服务,所以无论添加删除或者改变某个节点的哈希槽的数量都不会造成集群不可用的状态
  • 相关阅读:
    Ranger配置图片及json文件预览
    Java面试大厂名企高频真题--03虚拟机篇
    西电数据挖掘实验3——复杂网络社团检测
    git merging两边都被删除的文件
    带你认识图数据库性能和场景测试利器LDBC SNB
    css 将div固定在页面顶部不随页面滑动
    HDL & FPGA 学习 - IP 模块收集,推荐书目,参考
    xstream运用,JAVA对象转xml,xml转JAVA对象
    闲杂篇(一)vs2017 c语言、c++从一个函数返回多个参数给主函数|c++函数之间结构体如何传递参数
    Rancher-Kubewarden-保姆级教学-含Demo测试
  • 原文地址:https://blog.csdn.net/weixin_38963649/article/details/126180003