Redis Cluster 槽(Slot)

2023-11-10

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

槽 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错误,指引客户端转向至正在负责槽的节点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redis Cluster 槽(Slot) 的相关文章

  • 如何在实时添加对象时从 Redis 中弹出对象?

    我想让 Node js 进程运行 因为它正在检查 Redis 服务器是否有任何新的弹出内容 另一个进程将偶尔进行推送 而 Node 进程将尝试弹出任何进来的内容 Node 进程将保持运行 有人能给我指出一个好的方向吗 我正在尝试找出如何监听
  • 有没有办法在 Redis 和关系数据库中使用带有 @RedisHash 的实体?

    我正在使用Spring引导 为了将我的实体保存在关系数据库上 我配置了一个数据源和我的域类 例如 Entity Table schema schema name name tb name public class table name ex
  • 找不到模块“socket.io/node_modules/redis”

    当尝试做的时候 var redis require socket io node modules redis 我收到错误 找不到模块 socket io node modules redis 我不明白为什么 我正在运行 Windows 并运
  • Docker&Celery - 错误:Pidfile (celerybeat.pid) 已存在

    应用程序包括 姜戈 雷迪斯 芹菜 码头工人 Postgres 在将项目合并到 docker 之前 一切都运行顺利且正常 但是一旦将其移入容器 就开始出现问题 起初它开始得很好 但过了一会儿我确实收到了以下错误 celery beat 1 E
  • Spring RedisTemplate:8次调用后方法键挂起

    我使用 Spring RedisTemplate spring data redis 1 7 1 与 Redis 进行通信 我需要通过正则表达式获取然后删除键 例如 context user1 我用的方法 RedisTemplate key
  • connect-redis - 如何保护会话对象免受竞争条件影响

    我使用 nodejs 和 connect redis 来存储会话数据 我将用户数据保存在会话中 并在会话生命周期中使用它 我注意到两个更改会话数据的请求之间可能存在竞争条件 我尝试过使用 redis lock 来锁定会话 但这对我来说有点问
  • python 3.5 中的 json.loads 和 Redis

    我使用 json dumps 创建了一个 JSON 对象 并在 Redis 列表中将其 RPUSH ed 当使用 LRANGE redis lrange 返回 JSON 时 我收到一个二进制字符串 b si 00 ff 所以 json lo
  • 仅当尚未设置时才进行原子设置

    仅当尚未在 Redis 中设置时 是否有办法执行原子设置 具体来说 我正在创建一个像 myapp user user email 这样的用户 并且希望 Redis 在 user email 已被占用时返回错误 而不是默默地替换旧值 比如声明
  • 如何在多个Lua State(多线程)之间传递数据?

    我在中启动Redis连接池redis lua 通过从 C 调用 我得到了redis lua state 此 Lua 状态全局启动一次 仅在其他线程中启动get从中 当有一个 HTTP 请求 工作线程 时 我需要从redis lua stat
  • 如何让客户端下载动态生成的非常大的文件

    我有一个导出功能 可以读取整个数据库并创建一个包含所有记录的 xls 文件 然后文件被发送到客户端 当然 导出完整数据库的时间需要大量时间 并且请求很快就会以超时错误结束 处理这种情况的最佳解决方案是什么 例如 我听说过使用 Redis 创
  • Redis键空间事件不触发

    我有两个 Redis 客户端 在一个文件中我有一个简单的脚本设置并删除了 Redis 键 var redis require redis var client redis createClient 6379 127 0 0 1 client
  • 从redis中检索大数据集

    一台服务器上的应用程序查询另一台服务器上运行的 Redis 查询的结果数据集约为 250kzrangebyscore objects locations inf inf这在应用程序服务器上似乎需要 40 秒 当使用命令执行时redis cl
  • Caffeine Expiry 中如何设置多个过期标准?

    我正在使用 Caffeine v2 8 5 我想创建一个具有可变到期时间的缓存 基于 值的创建 更新以及 该值的最后一次访问 读取 无论先发生什么都应该触发该条目的删除 缓存将成为三层值解析的一部分 The key is present i
  • socket.io 广播功能 & Redis pub/sub 架构

    如果有人能帮助我解决一个小疑问 我将不胜感激 使用socket io广播功能和在Redis上使用pub sub设计架构有什么区别 例如 在另一个示例中 node js 服务器正在侦听 socket io 针对 键 模型 todo 和值 数据
  • 如何在Redis中进行持久化存储?

    关闭redis服务器后 使用set存储的值被破坏 在这里我找到了使用持久性存储的方法 有人帮助我 如何使用javascript实现这一点 我想将客户端的一些值存储在 redis 数据库中 并且必须在其他客户端中使用该值 您需要配置 Redi
  • Lua中按字符分割字符串

    我有像这样的字符串 ABC DEF 我需要将它们分开 字符并将两个部分分别分配给一个变量 在 Ruby 中 我会这样做 a b ABC DEF split 显然Lua没有这么简单的方法 经过一番挖掘后 我找不到一种简短的方法来实现我所追求的
  • 为什么 Redis TimeSeries 不捕获聚合中的最后一个元素?

    我试图了解 Redis 的时间序列规则创建的工作原理 但我很困惑为什么 Redis 会忽略聚合中的最后一项 并想知道这是否是预期的行为 我在中创建了示例代码redis cli为了显示 127 0 0 1 6379 gt FLUSHALL O
  • 有没有办法用Lettuce自动发现Redis集群中新的集群节点IP

    我有一个Redis集群 3主3从 运行在一个库伯内斯簇 该集群通过Kubernetes 服务 Kube 服务 我将我的应用程序服务器连接到 Redis 集群 使用Kube 服务作为 URI 通过 Redis 的 Lettuce java 客
  • 有没有办法让特定的key在集群模式下定位到特定的redis实例上?

    我想让我的多锁位于不同的redis实例上 我发现redission可以指定一个实例来执行命令 但是如果该命令与key相关 则指定的实例会将命令传输到另一个实例 你能给我一些建议吗 你可以 但这并不是微不足道的 首先 Redis 在键中使用大
  • 想要在后台不间断地运行redis-server

    我已经下载了 redis 2 6 16 tar gz 文件并安装成功 安装后我运行 src redis server 它工作正常 但我不想每次都手动运行 src redis server 而是希望 redis server 作为后台进程持续

随机推荐

  • 借助LVS+Keepalived实现负载均衡

    借助LVS Keepalived实现负载均衡 一 负载均衡 必不可少的基础手段 1 1 找更多的牛来拉车吧 当前大多数的互联网系统都使用了服务器集群技术 集群即将相同服务部署在多台服务器上构成一个集群整体对外提供服务 这些集群可以是Web应
  • ElasticSearch 学习笔记(一):倒排索引(Inverted index)

    分析一个术语 要先从名称入手倒排索引 英文原名Inverted index 大概因为 Invert 有颠倒的意思 就被翻译成了倒排 但是倒排这个名称很容易让人理解为从A Z颠倒成Z A 个人觉得翻译成反向索引更好 倒排索引是区别于正排索引
  • Java中Path环境变量的设置

    第一步 打开文件管理器选择 此电脑 右键 此电脑 选择属性 第二步 再此电脑属性页面找到 高级系统设置 第三步 选择 环境变量 选择最下面的新建 则弹出新建系统变量 变量名为JAVA HOME 一定要大写 变量值为jdk的存储路劲 变量名
  • 小程序首页轮播图设计

    效果图 微信小程序的数据详解 indicator dots 是否显示面板指示点 默认false indicator color 指示点颜色 默认rgba 0 0 0 3 indicator active color 当前选中的指示点颜色 默
  • java如何使用cdn_网站部署使用CDN网络缓存(示例代码)

    CDN原理及为自己的网站部署 CDN是什么 CDN Content Delivery Network or Content Ddistribute Network 内容分发网络 其目的是使用户可就近取得所需内容 解决 Internet网络拥
  • 【超分辨率实验】使用MMEditing进行图像超分辨率

    使用MMEditing进行图像超分辨率 使用MMEditing进行图像超分辨率 安装MMEditing 使用预训练模型完成推理 查找并下载预训练模型 调用API构建模型 调用API进行推理 分析图像恢复效果 使用自定义的数据集微调模型 准备
  • shell命令更新mysql数据库

    bin sh mysql h10 10 10 10 uroot p123456 e use centain database use finereport close sage model for update SET SQL SAFE U
  • 扫雷游戏及代码实现(超详细)

    扫雷游戏及代码实现 前言 1 游戏程序主函数 2 游戏实现原理 游戏过程 3 游戏代码实现 3 1 初始化和打印 3 2 布置雷区 3 3 玩家排查雷 3 4 系统扫描雷 前言 想必屏幕前的你 肯定玩过windows系统自带的那个游戏 扫雷
  • PCB板中字母代表的含义

    PCB板上元芯件的标识 R 电阻 J 跳线 D 二极管或稳压管 Q 三极管 C 电容 U 集成芯片 L 电感 FB 熔断保险丝 IC 芯片 T 变压器 ZD 稳压二极管 P 有时表示端口 插座等 X和Y代表 晶振 F为 保险电阻 ISO代表
  • 服务器动态文档,动态服务器网页.ppt

    动态服务器网页 修改 删除 记录总数 当前页 页大小 首页 gt 上页 gt 下页 gt 末页 size 2 gt 综合实例1 聊天室实现 数据库Chat mdb中有一个聊天信息表tb Chat info 字段如下 ID 自动编号 主键 N
  • 泛型的详解

    一 泛型的含义 为什么要使用泛型 泛型 即 参数化类型 一提到参数 最熟悉的就是定义方法时有形参 然后调用此方法时传递实参 那么参数化类型怎么理解呢 顾名思义 就是将类型由原来的具体的类型参数化 类似于方法中的变量参数 此时类型也定义成参数
  • python rfind用法_Python中的rfind()方法使用详解

    rfind 方法返回所在子str 被找到的最后一个索引 或者 1 如果没有这样的索引不存在 可选择限制搜索字符串string beg end 语法 以下是rfind 方法的语法 str rfind str beg 0 end len str
  • 自然语言处理相关问题总结

    自然语言处理相关问题总结 基础算法 结巴分词的原理 Word2vec的两种训练目标是什么 其中skip gram训练的loss function是什么 NER相关 命名实体识别 评价指标 是什么 介绍下基于深度学习的命名实体识别怎么做 介绍
  • 基于 Logistic 混沌映射和 Arnold 变换 的变换域水印改进算法【高级网络与信息安全技术-信息隐藏期末课程论文】

    基于 Logistic 混沌映射和 Arnold 变换 的变换域水印改进算法 摘要 1 简介 1 1 Arnold 变换 1 2 Logistic 混沌映射 1 3 DCT 变换 1 4 PSNR 和 NC 2 方案介绍 2 1人类视觉系统
  • 总结了pandas提取数据的15种方法,统统只需1行代码,真香!

    前言 本文的文字及图片来源于网络 仅供学习 交流使用 不具有任何商业用途 如有问题请及时联系我们以作处理 PS 如有需要Python学习资料的小伙伴可以点击下方链接自行获取 python免费学习资料 代码以及交流解答点击即可加入 panda
  • CGAL 二维剖分

    目录 一 2D Triangulations 1 定义 2 Representation 2 1 The Set of Faces 2 2 A Representation Based on Faces and Vertices 3 Sof
  • react native里获取设备屏幕宽高

    react native里获取设备屏幕宽高 不多说 方法如下 import Dimensions from react native var height width Dimensions get window height 即为屏幕高度
  • 项目实战:ES的增加数据和查询数据

    文章目录 背景 在ES中增加数据 新建索引 删除索引 在ES中查询数据 查询数据总数量 项目具体使用 实战 引入依赖 方式一 使用配置类连接对应的es服务器 创建配置类 编写业务逻辑 根据关键字查询相关的聊天内容 在ES中插入数据 总结提升
  • c++系列文章(1):signed和unsigned

    博客链接 带符号类型 signed 可以表示正数 负数或0 无符号类型 unsigned 仅能表示大于等于0的值 C 标准并没有规定signed类型应该如何表示 但约定了在表示范围内正值和负值的量应该平衡 在计算机内部 signed类型二进
  • Redis Cluster 槽(Slot)

    版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 https blog csdn net zlfprogram article details 77715714 槽 Slot