Redis-哈希槽

Redis-哈希槽

Redis 集群没有使用一致性hash, 而是引入了哈希槽的概念。

哈希槽的用途:
	Redis 集群中内置了 16384 个哈希槽,集群的每个节点分管其中的一部分hash槽。

	当需要在 Redis 集群中放置一个 key-value时,

		redis 会先根据CRC16算法计算该key对应的值,
		然后用该值对 16384 取模,根据取模后的结果来决定放置哪个槽,
		
	这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会再将哈希槽映射到不同的节点。
哈希槽带来的好处:
	这种结构很容易添加或者删除节点,我们以后新增或移除节点的时候不用先停掉所有的 redis 服务,即,无论是添加删除或者修改某一个节点,都不会造成集群不可用的状态,比如:

	1)在增加的时候,之前的节点各自分出一些槽给新节点,对应的数据也一起迁出;

	2)同样,当需要移除节点时,只需要把要移除的节点上的哈希槽挪到其他节点上就行了;

	3)客户端可以向任何一个Redis节点发送请求,然后由节点将请求重定向到正确的节点上 。
为什么要选择的槽是16384个呢?
			crc16会输出16bit的结果,可以看作是一个分布在0-2^16-1之间的数,redis的作者测试发现这个数对2^{14}求模的会将key在0-2^{14-1}之间分布得很均匀,因此选了这个值。
为什么没有用一致性哈希算法?

​ “用了哈希槽的概念,而没有用一致性哈希算法,不都是哈希么?这样做的原因是为什么呢?”
Redis Cluster是自己做的crc16的简单hash算法,没有用一致性hash。Redis的作者认为它的crc16(key) mod 16384的效果已经不错了,虽然没有一致性hash灵活,但实现很简单,节点增删时处理起来也很方便。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值