19.Redis Cluster - 槽Slot

redis集群中如何处理非本节点的slot 个槽,它会因为我们集群个数配置的不同而分配不同的slot给各个节点,而这篇文章就来聊聊当某个节点处理到非它所负责的slot时是如何处理的,这一点很好的体现了。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。应该是要存放到节点1中,对此节点2的做法是查看自己所维护的节点列表是否有负责该。 阅读详情

槽 Slot

Redis集群通过分片的方式来保存数据中的键值对:集群中的数据库被分为16384个槽(slot),数据库中的每个健都属于这16384个槽的其中一个,集群中的每个节点可以处理的0个或最多16384个槽。

当数据库中的16384个槽都有节点在处理时,集群处于上线状态(ok);相反,如果数据库中有任何一个槽没有得到处理,那么集群处于下线状态(fail)。

槽指派

通过向节点发送CLUSTER ADDSLOTS命令,可以将一个或多个槽指派(assign)给节点负责。当指派过程中有冲突,即将要指派的槽已经被指派了,则直接返回错误,当前指派命令不会执行。

通过CLUSTER INFO命令查看当前集群的信息;
通过CLUSTER NODES命令查看集群中各个节点负责的槽;
这里写图片描述

记录槽指派信息

clusterNode结构的slots属性和numslot属性记录了节点负责处理哪些槽;
slots属性是一个二进制位数组,检索复杂度为O(1),根据索引i上的二进制位的值来判断节点是否负责处理槽i,1为处理,0为不处理;
numslot属性记录节点负责处理的槽的数量。

传播节点的槽指派信息
一个节点除了会将自己负责处理的槽记录在clusterNode结构的slots属性和numslots属性之外,它还会将自己的slots数组通过消息发送给集群中的其他节点,来告知其他节点自己目前负责处理哪些槽。

因为集群中的每个节点都会将自己的slots数组通过消息发送给集群中的其他节点,并且每个接收到slots数组的节点都会将数组保存到相应节点的clusterNode结构里面,因此,集群中的每个节点都会知道数据库中的16384个槽分别被指派给了集群中的哪些节点。

clusterState结构中也有一个slots数组,该数组记录了集群中所有16384个槽的指派信息,每个数组项都是一个指向clusterNode结构的指针。
这里写图片描述

clusterState.slots数组记录了集群中所有槽的指派信息,而clusterNode.slots数组只记录了clusterNode结构所代表的节点的槽指派信息,当检索时前者效率高。后者存在的必要:当程序需要将某个节点的槽指派信息发送给其他节点时可以直接使用clusterNode.slots数组信息。

集群中执行命令-槽指向

在对数据库中的16384个槽都进行了指派后,集群就会进入上线状态,这是客户端就可以向集群中的节点发送数据命令了。
这里写图片描述
一个集群客户端通常会与集群中的多个节点创建套接字连接,而所谓的节点转向实际上就是换一个套接字来发送命令。

计算键属于哪个槽

这里写图片描述
判断槽是否由当前节点负责处理
这里写图片描述
由槽查看负责处理节点
这里写图片描述
MOVED错误
当节点发现键所在的槽并非由自己负责处理的时候,节点就会向客户端返回一个MOVED错误,指引客户端转向至正在负责槽的节点。

Redis 哈希槽解析 哈希槽(Hash Slot)是 Redis 集群实现数据分片的核心机制,它将整个数据集划分为多个逻辑分区。Redis 集群采用固定数量的哈希槽(16384个),每个键值对通过计算CRC16校验值后,再对16384取模来确定其所属的哈希槽。集群规模适配数学推算:在1000节点集群中,平均每个节点管理16个槽位实际测试:Facebook的Redis集群验证了16384槽位在300节点规模下的稳定性对比方案:早期版本曾考虑65536槽位,但会导致心跳包过大(16KB vs 4KB)网络通信优化。 阅读详情

相关推荐

阿里大厂面试:2亿条数据需要缓存,如何设计这个存储方案?

阿里大厂面试

互联网老辛 7532

Redis中的插槽(slot)

Redis中的插槽(slot)

qq_35872777的博客 4273

路由工具之策略路由policy-based-routing、MQC三板斧流分类、流行为、流策略

PBR(Policy-Based Routing,策略路由)策略路由可理解为控制路由,因为PBR策略的优先级高于传统路由表的转发,所以它主要用于影响数据包转发的技术。

Hades_Ling的优快云博客 5579

【redis】redis集群时的槽Slot是什么?

跨槽操作是指一条 Redis 命令涉及多个键,但这些键被分配到不同的槽中。Redis 集群默认禁止跨槽操作,因为不同槽可能位于不同节点,无法保证原子性。

玖拾说架构 1793

复现YOLOv8语义分割和目标检测训练自己的数据集

训练过程首先会显示你所使用的训练的硬件设备信息,然后下一段话则是你的参数配置,紧接着是backbone信息,最后是加载信息,并告知你训练的结果会保存在runs\segment\trainxx。(1)修改数据加载配置文件,在E:\project\MODEL\YOLO\yolov8-8.2.76\ultralytics-8.2.76\ultralytics\cfg\datasets。三、训练自己的数据集,segment数据集是json格式的。如果想使用多卡训练,device='\0,1,2,xxx\'

m0_56182552的博客 2764

MuJoCo 相机图片怎么拿?视角调整获取物体图片及实时显示(附代码)

在Mujoco的仿真中,对于识别抓取场景来说,如何获得添加的body等物体的实时图像很重要,今天就分享下如何添加相机视角及可视化小方块(举例)的实时图片。复制一个scene.xml为scene_withcamera.xml,在xml中添加camera和小方块如下。设置xml文件中添加的相机body id。需要创建一个离屏渲染器。

darcsdn 2128

redis 槽点重新分配 集群_Redis Cluster

前言redis 是我们目前大规模使用的缓存中间件,由于它强大高效而又便捷的功能,得到了广泛的使用。现在的2.x的稳定版本是2.8.19,也是我们项目中普遍用到的版本。redis在年初发布了3.0.0,官方支持了redis cluster,也就是集群。至此结束了redis 没有官方集群的时代,之前我们用redis cluster用的最多的应该是twitter 发布的Twemproxy(https:/...

weixin_29248611的博客 1491

RT-2(robotics-transformer2)论文--阅读笔记

谷歌RT-2机器人论文的阅读笔记。

weixin_61255639的博客 1824

Redis Cluster日常操作命令梳理

CLUSTER SETSLOT NODE 将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。CLUSTER SETSLOT MIGRATING 将本节点的槽 slot 迁移到 node_id 指定的节点中。CLUSTER SETSLOT IMPORTING 从 node_id 指定的节点中导入槽 slot 到本节点。

分享技术架构、运维、程序开发经验 1415

无人船 | 基于ROS的轻量级多无人艇自主导航仿真框架

无人水面艇USV是海上自主无人系统的关键组成部分,在民用、军用领域应用广泛,例如海上救援、水质测量、扫雷反潜等,因此对USV导航算法的研究具有重要意义。为了便于进行USV相关算法的验证与部署,本文介绍的这套基于ROS的多无人艇的自主导航仿真平台,轻量化地实现了建图、规划、控制等多种功能,同时自研框架保证了功能的高度可拓展和可定制

FRIGIDWINTER的博客 7993

银行业数据科学家的 6 条经验教训

原本希望在计算机科学、统计学和机器学习领域工作。运用新方法获得独特见解,实现一切自动化。简而言之,最终成了这个职业炒作的牺牲品。我想和你们分享一下。希望我们能够摆脱炒作,提高你对数据科学家工作的理解。

茶桁专栏 245

redis cluster集群节点的扩缩容、重新分配槽位

至此,我们已经成功的把8007主节点的数据迁移到8001上去了,我们可以看一下现在的集群状态如下图,你会发现8007下面已经没有任何hash槽了,证明迁移成功!主节点的里面是有分配了hash槽的,所以我们这里必须先把8007里的hash槽放入到其他的可用主节点中去,然后再进行移除节点操作,不然会出现数据丢失问题。(ps:输入all为从所有主节点(8001,8002,8003)中分别抽取相应的槽数指定到新节点中,抽取的总槽数为600个)(ps:需要多少个槽移动到新的节点上,自己设置,比如600个hash槽)

qq_44027353的博客 2771

VLA数据采集以及训练

直到15s计时结束,弹出下面的内容,这个时候不会录制视频了,这里就是需要复位物体到初始位置,尽量保证物体的初始位置放在一样的位置,计时3s,同样根据自己的复位时间来修改(--dataset.reset_time_s=3),这里和前面录制数据的区别就是fps后面多了一个nment,可以作为一个标记,知道什么时候开始去复位而不会拍到自己的手臂。复制网址,在浏览器打开,会出现下面的窗口,依次检查每一轮是否存在问题,例如是否出现录制不完整,是否存在除了机械臂以外的其他移动物体,这些都可能会影响最终训练的效果。

weixin_45303602的博客 496

Redis Cluster 详解

RedisClusterRedisCluster要求至少需要3个master才能组成一个集群,同时每个master至少需要有一个slave节点。各个节点之间保持TCP通信。当master发生了宕机,RedisCluster自动会将对应的slave节点提拔为master,来重新对外提供服务。RedisCluster功能,。......

心猿意码 1547

AFSim2.9.0学习笔记 —— 4.1、创建项目,以此项目介绍工作中Wizard使用(红方/蓝方武器平台、阵营、更换图标等,多图详细介绍)

AFSim2.9.0学习笔记 —— 4.1、创建项目,以此项目介绍工作中Wizard使用(红方/蓝方武器平台、阵营、更换图标等,多图详细介绍)

2250

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Naive UI 弹层选型指南:Modal、Drawer、Popover 用错了,用户会很累

做 Vue 3 项目的人,几乎都绕不开 Naive UI 的弹窗体系。它把弹层拆成三块:居中的 Modal 对话框、贴边滑入的 Drawer 抽屉、以及挂在元素旁边的 Popover 气泡卡片。弹层选型的常见翻车,不是 API 不会用,而是分工没想清楚——用 Modal 弹了个该用 Popover 的提示,主流程被拦得莫名其妙。下面按"交互任务"过一遍三个组件,帮你把 Vue 3 弹层选型的判断标

gitblog_00836的博客 71

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Redis Cluster通过hash slot映射数据,但是如何把两个key映射到同一个slot中呢?

Redis Cluster Hash Slot和Hash Tag介绍干货:[公众号:堆栈future]Redis Cluster介绍Redis Cluster Hash Slot原理Redis Cluster Hash Tag原理Redis Cluster集群介绍你可以这么理解,就是切片集群或者分片集群,用来存储大量数据的。为什么redis要使用它呢?redis的Master-Slave集群不行吗?这个也可以很简单的理解,因为后者是主备存储,前者是集群存储。主备存储目的就是两个,一个就是防止主从任意一个节点

stackfuture的博客 2510

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

redis之集群(Cluster)

Redis集群通过多组Master/Slave节点存储数据的不同部分,解决了单机内存不足的问题。核心数据分片算法包括哈希求余、一致性哈希和Redis采用的哈希槽分区算法(16384个槽位)。文章详细介绍了基于Docker搭建Redis集群的步骤,包括配置生成、容器启动、集群构建等。同时分析了集群故障转移机制,包括故障判定、Raft选举算法等。最后讲解了集群扩容操作,包括添加新主节点、重新分配槽位和添加从节点。Redis集群通过分布式架构实现了高可用性和扩展性,是处理大数据量的有效解决方案。

2301_79176091的博客 428

【redis源码分析】redis cluster 集群实现

if (slot!&&!return n;槽位迁移什么是槽位迁移?rehash,就这样理解嘛。什么时候发生?比方我某个节点挂了、比方我某个节点又复活可以分摊压力了;long dbid;

2301_82241859的博客 996

Redis源码解析(20) 集群[3] 键的存储,重新分片与重定向

文章目录引言基础数据结构槽指派重新分片1. `CLUSTER SETSLOT IMPORTING `2. `CLUSTER SETSLOT MIGRATING `3. `CLUSTER GETKEYSINSLOT `4. `MIGRATE `5. `RESTORE-ASKING`7. `CLUSTER SETSLOT NODE `MOVED与ASK 引言...

李兆龙的博客 1354

转载一篇介绍redis cluster的文章

转https://www.cnblogs.com/wxd0108/p/5798498.html 前言 redis 是我们目前大规模使用的缓存中间件,由于它强大高效而又便捷的功能,得到了广泛的使用。现在的2.x的稳定版本是2.8.19,也是我们项目中普遍用到的版本。 redis在年初发布了3.0.0,官方支持了redis cluster,也就是集群。至此结束了redis 没有官方集群的...

zhangkun2609的博客 280

Redis 高可用:主从、哨兵、Cluster 三件套,一台机器挂了怎么不停服务?

Redis 挂了服务就没了?从主从复制、哨兵到 Cluster 集群,三层演进一次讲透。附真实实测:docker kill 主节点,哨兵完整日志链自动换主;Cluster 16384 槽与 MOVED 重定向实测。含脑裂讲解与面试回答模板。

weixin_46316564的博客 129

Redis cluster集群扩容缩容原理

1. Redis Cluster集群扩容 1.1 扩容原理 redis cluster可以实现对节点的灵活上下线控制 3个主节点分别维护自己负责的槽和对应的数据,如果希望加入一个节点实现扩容,就需要把一部分槽和数据迁移和新节点 每个master把一部分槽和数据迁移到新的节点node04 1.2 扩容过程 准备新节点 准备两个配置文件redis_6379.conf和redis_6380.conf daemonize yes port 6379 logfile "/var/log/red

疯一样的女子 9255

redis集群-----切片集群(cluster)

背景 上篇文章聊到了redis的哨兵机制,哨兵的作用是保证主从节点宕机或者故障的时候可以可以进行自愈,选举合适的master并且告知client。这个机制也就保证了redis集群的可用性。但是这次我们又遇到了新问题,那就是主从复制架构的情况下redis 的内存不够用了该怎么办。有人说那就不断的阔各个机器的内存,按照常理我们都知道一个人的力量是有限的。 当一个节点的内存过大,那么我们在进行同步的时候会通过RDB文件进行同步,而生成rdb文件是通过fork一个子进程进行的(下篇文章我们仔细聊下这个过程),在进行

weixin_40413961的博客 1844

高级JAVA面试题详解(三)——Redis(redis cluster、虚拟槽、一致性hash算法、master选举、淘汰策略、String数据结构)

Redis详解 下篇 希望这一篇能搞定剩下的东西,如果搞不定,那咱们还有下下篇这就和咱们开发拿到的需求一样,这就是最后一版需求了,一天后我这有个进化版、又一天后我这有个究极版、再过一天究极进化版如期而至。整个一数码宝贝的进化流程,吐槽下自己最近比较忙 没提前准备好今天要写的东西。主要还是农药S19赛季来了上分去了,对不住各位老板。 面试官:Redis的集群模式有哪些啊小韭菜? 1、主从模式(m...

“实用”是软件压倒一切的要素 924

redis 槽点重新分配 集群_redis高可用集群-水平扩容-缩容

1. Redis集群原理构建Redis集群,需要至少3个节点作为master,以此组成一个高可用的集群,此外每个master都需要配备一个slave,所以整个集群需要6个节点,这也是最经典的Redis集群,也可以称之为三主三从,容错性更佳。1、16384个slots(*槽位*) **Redis Cluster没有单机的那种16个数据库(0-15)的概念,而是分成了16384个slots(槽位),每...

weixin_42522275的博客 411
上一篇: 18.Redis Cluster - 集群
下一篇: 20.Redis Cluster - 重新分片
架构师的清醒
博客等级 码龄14年 291粉丝 397原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值