微架构 芯片 运算器 指令集 寄存器 缓存
主页 正文

Redis集群为何采用16384个槽位?

redis最大多少个节点问题

从https://blog.csdn.net/chenxuegui1234/post/details/100171599

群集redis体系结构,重复将使用更多。

如下图所示的客户要求的密钥

,根据公式has_slot = crc16(key)(key)(key)Mod16384,计算哪个片段访问哪个片段的操作相应的结!

所以每个人都认为,为什么有16384个凹槽? 换句话说,该值分布在0〜65535之间。
当作者制作计算mod时,为什么不选择MOD65536,而是选择MOD16384?

实际上,当我第一次想到这个问题时,我想。

幸运的是,作者给出了答案!

地址如下:https://github.com/antirez/redis/2576

apwouldhaveslots/nbitssetttalecetanttalecetantofbit sset。

因此,可以包括上述段落的读者。
没有必要阅读本文,因为作者说得很清楚。
本文只是上述段落的解释。

让我们回忆起重新分配的原则!

让我们在这里清除结。
当我们在两个redis节点之间再次离开两个节点时,我们必须对客户执行以下顺序。
-Mottes-pers; : 普通的; 255,255,255); >

含义很简单,7000节和7001节彼此认识! < /

一旦握手成功,两个节点将定期发送ping / pong消息以交换数据的信息,如下图所示。

在这里,我们必须注意三点。

哪些数据信息交换?

有关交换数据的信息由消息主体和消息标头组成。

该消息不过是某些节点,IP,端口号,运输时间。
它与这篇文章不太接近,我并不是仔细地说。

让我们看一下消息头,结构如下

请注意红色框的,类型表示消息的类型。

此外,新闻头上还有坦克绘画,长度为16383/8。
这个缝隙属于这个。

数据的数据大小是多少? < /

在消息的消息中,最多的空间是myslots [cluster_slots / 8]。
该部分的大小是:

16384÷8÷1024 = 2kb

然后,在消息中,它将传输一定数量的其他节点信息进行交换。

那么这些节点的信息是什么?

簇总数的大约1/10,至少3节的信息。

这里的重点是:节点越多,消息正文的越大。

消息大小约为10节的状态信息的1 ko。

规则频率是多少?

REDIS群集的节点每秒发布ping消息。
法律如下

因此,每隔节点发送的ping消息数为

cluster_node_timeout/2)

带宽的损失如下所示。

(1)如果狭缝为65536,请发送“心跳信息的消息达到8 kb,而发送的心跳包则太大。

如上所述,在消息的中,占用最多空间的一个是迈萨尔(Mysal-on-the)[cluster_slots/8]。
>

因为每一秒钟,redis都必须发送一定数量的ping消息作为数据包心跳。
如果slot为65536,则该ping报文头太大,浪费带宽。

(2)Redis集群主节点的数量基本不可能超过1000个。

前面说过,集群节点越多,消息体中携带的Data就越多心跳包。
如果节点超过1000个,这也会造成网络拥塞。
因此,Redis作者不建议rediscluster节点数超过1000个。

那么,对于节点数小于1000个的rediscluster集群来说,16384个slot就足够了。
无需扩容至65536。

(3)槽越小、节点越少,压缩比越高。

Redis主节点配置信息中,它负责的哈希位置是通过一个位图来传输的,它被保存为位图,在传输过程中,位图会被压缩。
但是,如果bitmap/N个位置的填充率很高(N代表节点数),则压缩率就大了。
位图将非常弱。

如果节点数少而哈希位置数多,则位图的压缩率会很低。

ps:文件压缩比是指压缩前后文件大小的比例。

综上所述,作者决定取16384个位置,不多不少,够用即可!

为什么Redis集群有16384个槽

REDIS群集选择16384个插槽的原因可以通过多种方式解释。
首先,作者考虑了设计期间的性能和维护平衡。
在大多数应用程序方案中,16384插槽足以满足节点的数量,并且分配给每个主节点的插槽数量足以确保有效的数据分布。
此外,数字16384在小群集中很容易用位图表示,因此被仔细选择,因为它可以轻松传播和管理插槽配置。
在一个小集群中,使用更多的插槽,设置了大多数位图位,因此压缩效率低下,可以重复信息传输。
考虑到节点手持酋长和心跳机制,Redis群集设计了一种在节点之间交换信息的方法。
每个节点向交换状态信息发送PING/PONG消息。
消息头中包含的插槽配置信息由位图表示,长度为16383/8。
此设计可确保有效的信息传输。
消息文本通常提供有关集群中节点总数的1/10的信息,并包括至少三个节点的信息。
随着节点的数量增加,消息主体的大小会增加,这会影响带宽的使用和网络性能。
作者解释了他选择16384个插槽而不是65536个插槽的原因。
65536个插槽使消息标头非常大,因此心跳包太大,带宽资源浪费了。
同时,如果节点的数量增加,则可以大大增加心跳数据包的信息,从而导致网络拥堵。
另外,当节点的数量较小时,插槽数量越低,压缩率越高,并且提高了信息传输效率。
总而言之,16384个插槽的选择是性能,维护和网络效率之间平衡的结果,其目的是提供有效且易于操作的REDIS群集配置解决方案。
我们希望这种分析能够帮助您了解REDIS群集体系结构的决策过程。

redis集群的插槽问什么是16384个

作者的原始词,请小心。

1。
普通的心跳软件包带有节点的完整配置。
可以用旧配置以一种更新旧配置的方式替换旧配置。
这意味着它们以原始形式包含节点位置的配置,16,000个位置的配置将使用2 ko的内存,但是使用65,000个位置将使用8 ko的内存。

2。
同时,由于其他设计妥协,Redis群集不能扩展到1000多个节点。

因此,16 kb更适合确保每个主设备具有足够的位置,最多可通过Bitmap存储来传输REDIS节点的配置信息。
传输前有一个压缩过程。
压缩率与位置和节点的数量有很大的关系(因为当nissmall时,位图将定义位置/nbits时,这代表了定义位的很大一部分。
)[位置数量/节点数量]。
如果不大,压缩率越低。

我是如何解决redis集群批量获取的效率问题的

相信大家在使用Redis集群的时候,对于Redis集群的批量操作都会有一个现象:使用Redis集群去获取数据的时候,效率总是不高,当数据达到百万级的时候,你会发现, redis的读取效率令人无法接受。
接下来我会告诉大家如何理解集成在Reedis集群中的Redis Redis集群的Hachs GLIP。
value的值是16384,得到的值就是key所在的槽位(slot); 锁定后,您可以确定哪个按钮处于打开状态。
#### 如何评估redis集群中每个节点的槽分布? 使用命令:Clusternodes或clusterslots ####如何通过键值知道位置:ClusterKeysLots {key} ####高效解增加,我们可以知道上面的Reids集群的存储主存储,所以我们可以这样做以下处理:根据槽位的值批量获取你需要的key,以单点连接的方式连接到Redis节点,在同一批按钮上获取key。
注意:以点的形式连接或者使用集群的方式,即使处于一个节点,效率也不会提高; # 当具体知道我使用的PHP语言时,我从计算[CRC16算法](https://www.php.net/manual/en/)使用函数方法得到的结果这个.crc32 .php然后执行mod16384(固定值)来获取哈希槽###由于我知道这些键的哈希值,所以我还需要知道价格对应的节点这个键值,所以 我可以通过redis的集群自动获取对应的节点及其hash值;

热门资讯
CNC加工中心G98与G99指令区别解析
为什么不要买至强cpu
中断类型码计算方法详解
数控加工中心XZ平面圆弧编程技巧解析
工频电路电阻电感电容串联电压计算与波形解析
如何撰写简洁高效的员工价值观案例
全球芯片生产商综合排名揭晓
价值实体:通俗解读与重要性