redis哈希槽的作用

Redis哈希槽的作用

1、记录来源

利用阿里云监控平台,监控接口时看到一个非常慢的接口,点了进去,发现了slot标志

1647399933257

1647400124049

好奇心促使我想知道redis中slot是做什么的

2、作用

slot:称为哈希槽

Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value

时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,

这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大

致均等的将哈希槽映射到不同的节点。

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

Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽.集群的每个节点负责一部分hash槽。这种结构很容易添加或者删除节点,并且无论是添加删除或者修改某一个节点,都不会造成集群不可用的状态。

使用哈希槽的好处就在于可以方便的添加或移除节点。

当需要增加节点时,只需要把其他节点的某些哈希槽挪到新节点就可以了;

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

在这一点上,我们以后新增或移除节点的时候不用先停掉所有的 redis 服务。

这里有个理解误区,有初学者会想,这个slot是不是存储数据的点?就是只能存16383+1个键?
实际并不是这样,这个slot只是对应节点(Redis服务)的一个存储范围(可以理解为这个Redis的别名)。
比如,现在有3台Redis ,分别给他们分配slot :

img

image.png

现有一个key要insert到Redis,那么根据 CRC16(key) mod 16384的值,比如得到3000,那就把这个key保存在A服务器里面了。读的时候也一样,有个key要去读,就先 CRC16(key) mod 16384 找到对应的slot,然后就去对应的服务器找数据。看起来,很像个索引吧。

侵删!

posted @   码出新生活!  阅读(625)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示