【哈希槽算法】概念、对比、优点、举例理解_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节点从集群中移除即可。
    • 由于哈希槽从一个节点将移动到另一个节点并不会停止服务,所以无论添加删除或者改变某个节点的哈希槽的数量都不会造成集群不可用的状态
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值