• 【哈希槽算法】概念、对比、优点、举例理解_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节点从集群中移除即可。
      • 由于哈希槽从一个节点将移动到另一个节点并不会停止服务,所以无论添加删除或者改变某个节点的哈希槽的数量都不会造成集群不可用的状态
  • 相关阅读:
    无线物理层安全大作业
    JAVA练习题36:打乱一维数组中的数据,并按照4个一组的方式添加到二维数组中
    Kubernetes 笔记 / kubeadm / 高可用注意事项
    深度学习推理显卡设置
    基于Tensorflow搭建卷积神经网络CNN(水果识别)保姆及级教程
    利用Spring Boot框架做事件发布和监听
    数据库与缓存数据一致性解决方案
    【kubernetes】kubernetes二次开发
    docker 构建jar包/vue镜像以及发布
    时序分解 | MATLAB实现ICEEMDAN+SE改进的自适应经验模态分解+样本熵重构分量
  • 原文地址:https://blog.csdn.net/weixin_38963649/article/details/126180003