Redis集群系列七 —— 散列插槽分析

news2024/9/28 11:14:20

集群状态日志分析

Redis 分片集群引入了一个逻辑上的插槽或哈希槽概念,将集群划分为16384(0~16383)个槽位,集群中的每个节点占据一部分槽位数,在逻辑上将集群中的所有节点构成了一块完整的内存空间。

这个日志中可以通过查看集群状态就能看出来:

6d7a3b1f670fcc8ce3367f663f26658cd4364831 127.0.0.1:30005@40005 slave 7823d2206f0b7071371d9854a75075d2c737059f 0 1672121650000 3 connected
ad8bbafb88417b1658fd26c0c6825522eb977bec 127.0.0.1:30002@40002 master - 0 1672121650218 2 connected 5461-10922
415eac23481b5f2445c866feeecf31f88e0049f4 127.0.0.1:30006@40006 slave 8ef0a9e69c7a8a356e9b953419a7b0c101fb66e4 0 1672121650218 1 connected
8ef0a9e69c7a8a356e9b953419a7b0c101fb66e4 127.0.0.1:30001@40001 myself,master - 0 1672121649000 1 connected 0-5460
f015eacce4b33ebadbe33670534efd772cecc9c2 127.0.0.1:30004@40004 slave ad8bbafb88417b1658fd26c0c6825522eb977bec 0 1672121649913 2 connected
7823d2206f0b7071371d9854a75075d2c737059f 127.0.0.1:30003@40003 master - 0 1672121650519 3 connected 10923-16383

 每行格式由以下字段组成:

<id> <ip:port> <flags> <master> <ping-sent> <pong-recv> <config-epoch> <link-state> <slot> <slot> ... <slot>

每个字段的含义如下:

  1. id:节点 ID,一个40个字符的随机字符串,当一个节点被创建时不会再发生变化(除非CLUSTER RESET HARD被使用)。
  2. ip:port:客户端应该联系节点以运行查询的节点地址。
  3. flags:逗号列表分隔的标志:myself,master,slave,fail?,fail,handshake,noaddr,noflags。标志在下边有详细解释。
  4. master:如果节点是从属节点,并且主节点已知,则节点ID为主节点,否则为“ - ”字符。
  5. ping-sent:以毫秒为单位的当前激活的ping发送的unix时间,如果没有挂起的ping,则为零。
  6. pong-recv:毫秒 unix 时间收到最后一个乒乓球。
  7. config-epoch:当前节点(或当前主节点,如果该节点是从节点)的配置时期(或版本)。每次发生故障切换时,都会创建一个新的,唯一的,单调递增的配置时期。如果多个节点声称服务于相同的哈希槽,则具有较高配置时期的节点将获胜。
  8. link-state:用于节点到节点集群总线的链路状态。我们使用此链接与节点进行通信。可以是connected或disconnected。
  9. slot:散列槽号或范围。从第9个参数开始,但总共可能有16384个条目(限制从未达到)。这是此节点提供的散列槽列表。如果条目仅仅是一个数字,则被解析为这样。如果它是一个范围,它是在形式 start-end,并且意味着节点负责所有散列时隙从 start 到 end 包括起始和结束值。
     

flags 标志的含义:

  • myself:您正在联系的节点。
  • master:节点是主人。
  • slave:节点是从属的。
  • fail?:节点处于PFAIL状态。对于正在联系的节点无法访问,但仍然可以在逻辑上访问(不处于FAIL状态)。
  • fail:节点处于FAIL状态。对于将PFAIL状态提升为FAIL的多个节点而言,这是无法访问的。
  • handshake:不受信任的节点,我们握手。
  • noaddr:此节点没有已知的地址。
  • noflags:根本没有标志。

散列哈希槽原理

当 key 写入的时候,集群会通过一定的算法,将要写入的数据路由到指定的插槽上。需要注意的是数据 key 不是与节点绑定,而是与插槽绑定。

Redis 会根据 key 的有效部分计算插槽值,分两种情况:

  • key中不包含“{}”,整个key都是有效部分
  • key中包含“{}”,且“{}”中至少包含1个字符,“{}”中的部分是有效部分

 计算方式是利用 CRC16 算法得到一个 hash 值,然后对 16384 取余,得到的结果就是 slot 值。

举例来说:键是k1,那么就根据 k1 计算;如果是 {test}k1,则根据 “{test}” 计算。如图:

  如上图,在 30001 节点执行命令时,对 k1 做 hash 运算,并对 16384 取余,得到的结果是 12706,因此要存储到端口为 30003 的节点上,操作其他命令也是同样以此类推。

如果想要将同一类数据保存在同一个实例上,这一类数据需要使用相同的有效部分。例如:键值 “{应用}” 为前缀,如上图中的 {test}k1 和  {test}k2。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/129290.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

对象定义-解构-枚举属性遍历以及对象内函数

属性名表达式 定义对象的属性有两种方式 1、直接使用标识符作为属性名 obj.name 2、以表达式作为属性名 obj[ab] 10 let obj {} obj.name 孙悟空 // 孙悟空 obj[a b] 10 // 10 console.log(obj); // {name: 孙悟空, ab: 10}es5中字面量定义对象只能使用一种方法 var …

4.3.3、划分子网的 IPv4 地址

若有一个大型的局域网需要连接到因特网 若需要申请一个 C 类网络地址&#xff0c;其可分配的 IP 地址数量只有 254254254 个&#xff0c;不够使用 因此申请了一个 B 类网络地址&#xff0c;其可分配的 IP 地址数量达到了 655346553465534 个 给每台计算机和路由器的接口分配一…

实验九、消除互补输出级交越失真方法的研究

一、题目 互补输出级交越失真消除方法的研究。 二、仿真电路 基本互补电路和消除交越失真互补输出级如图1所示。晶体管采用 NPN 型晶体管 2N3904 和 PNP 型晶体管 2N3906。二极管采用 1N4009。 在实际的实验中&#xff0c;几乎不可能得到具有理想对称性的 NPN 型和 PNP 型管…

网络编程套接字----UDP协议

文章目录前言一、理解源IP地址和目的IP地址二、认识端口号理解"端口号"和"进程ID"理解源端口号和目的端口号三、认识TCP协议四、认识UDP协议五、网络字节序六、socket编程接口socket常见APIsockaddr结构sockaddr结构sockaddr_in 结构in_addr结构七、地址转…

第三方软件测试▏有效保障软件产品质量的关键性步骤

软件测试作为软件产品生命周期中不可或缺的重要步骤&#xff0c;被许多软件企业所重视。主要是通过对软件产品进行全面的测试&#xff0c;确保软件质量以及满足用户需求。但软件测试不仅仅是个简单的检测工作&#xff0c;而是一个系统性的、有组织性的测试过程&#xff0c;包含…

Linux:安装 telnet 命令

我是 ABin-阿斌&#xff1a;写一生代码&#xff0c;创一世佳话&#xff0c;筑一览芳华。如果小伙伴们觉得不错就一键三连吧~ 声明&#xff1a;原文地址&#xff1a;https://www.pudn.com/news/6332b44a272bb74d44053074.html 其他参考文章&#xff1a;https://www.cnblogs.com…

尚医通-上传医院接口-需求准备(十七)

目录&#xff1a; &#xff08;1&#xff09;数据接口-上传医院接口-需求准备 &#xff08;1&#xff09;数据接口-上传医院接口-需求准备 在医院接口设置的时候说过&#xff0c;我们做的是预约挂号平台&#xff0c;里面有数据的显示&#xff0c;挂号等等相关业务&#xff0c;…

计算机组成原理【by王道考研计算机】

文章目录第一章1. 什么是计算机系统2. 硬件的发展3. 计算机硬件的基本组成冯诺依曼结构现代计算机结构主存储器运算器控制器工作过程实例4. 计算机系统的层次结构五层结构三种级别的语言5. 计算机的性能指标存储器的容量CPU其他常用时间单位第二章1. 进制转换2. 字符与字符串3.…

下一代,容器工具Podman

一、简介 Kubernetes 团队发布了最新的 1.20 版本时&#xff0c;有一枚重磅炸弹&#xff1a;正式宣布弃用 Docker 支持的功能。弃用 Docker 之后&#xff0c;开发者们对其替代品的讨论逐渐热烈&#xff0c;其中 Containerd 和 Podman 倍受期待。 Podman 是一个开源的容器运行…

云原生、20.3k Star......时序数据库 TDengine 的 2022 年精彩纷呈

日月其迈&#xff0c;时盛岁新 2022 的进度条已经加载至“100%” 疫情肆虐下&#xff0c;毫无疑问 这仍然是头顶风雪攀登山峰的一年 好在如今曙光已现 回望这一年&#xff0c;TDengine 也硕果满满 2022 年是 TDengine 创立的第六个年头 我们付出着&#xff0c;也在收获着…

英伟达Orin芯片平台使用TensorRT加速部署YOLO

前言 自动驾驶行业想要在开发板上部署一套算法还是需要花费很大功夫的&#xff0c;因为计算资源的限制以及实时性要求高。并不像在服务器端部署算法那样粗犷。接下来就记录一下YOLO系列部署的过程&#xff0c;后期会把开发板上的问题都记录在此。 一、部署环境 计算平台&…

11.简单的CSS按钮悬停特效

效果 源码 <!DOCTYPE html> <html> <head><title>Button Hover Effects</title><link rel="stylesheet" type="text/css" href="style.css"> </head> <body><a href="#"><…

信贷产品年终总结之风控评分模型

叮咚&#xff0c;信贷年终总结的又一个专题来了&#xff0c;作为报告总结类的系列型文章&#xff0c;近期我们番茄知识星球平台陆续发布了相关年终总结专题&#xff0c;依次为客群特征画像、贷中行为分析、贷后逾期表现等&#xff0c;以上文章可详见之前陆续发布的内容。该业务…

nacos配置部署与管理

nacos配置部署与管理配置文件配置获取顺序&#xff1a;nacos配置热部署方式一&#xff1a;RefreshScope方式二&#xff1a;ConfigurationProperties配置文件 首先新建配置文件 Data ID&#xff1a;配置文件的名称&#xff08;唯一&#xff09;命名规范&#xff1a;服务名称-运…

广州车展|继原力技术之后,长安深蓝半固态电池呼之欲出

新年将至&#xff0c;万象更新。12月30日&#xff0c;2022第二十届广州国际汽车展览会在广州中国进出口商品交易会展馆隆重举办。全新数字纯电品牌长安深蓝携旗下首款战略车型深蓝SL03重磅参展&#xff0c;并邀请深蓝SL03车主亲临车展现场&#xff0c;或进行产品讲解&#xff0…

面向对象分析与设计的底层逻辑

作者&#xff1a;高福来 阿里全球化业务平台团队 在面向对象出现之前&#xff0c;已有面向过程的分析方法&#xff0c;那为什么面向对象被提出了呢&#xff1f;究其本质&#xff0c;人们发现面向过程并非按照人正常认识事物的方式去分析软件。面向过程是一种归纳的分析方法&a…

virtio技术(3)virtqueue机制

virtio技术&#xff08;3&#xff09;virtqueue机制 virtio的关键技术是virtqueue机制&#xff0c;其提供了一套统一的用于virito前端和后端的通信机制。virtqueue的核心数据结构是vring&#xff0c;这是virtio前端驱动和后端Hypervisor虚拟设备之间传输数据的载体。 vring数…

Word处理控件Aspose.Words功能演示:使用 Java 将 RTF 转换为 PDF

Aspose.Words 是一种高级Word文档处理API&#xff0c;用于执行各种文档管理和操作任务。API支持生成&#xff0c;修改&#xff0c;转换&#xff0c;呈现和打印文档&#xff0c;而无需在跨平台应用程序中直接使用Microsoft Word。此外&#xff0c; Aspose API支持流行文件格式处…

改变podman的存储路径

使用podman容器时&#xff0c;podman会默认使用/var/lib/containers路径作为存储路径&#xff0c;可能会导致根磁盘空间占用过大&#xff0c;那如何修改podman的存储路径呢&#xff1f;本文将带你一起来探讨。 前几天公司的服务器根目录磁盘空间不足了&#xff0c;经过查找问题…

JAVA - fastjson 中 JSONObject 的顺序问题

目录 1. JSONObject 存在的默认排序问题一 1.1. 解决方案一 1.2. 解决方案二 2. JSONObject 存在的默认排序问题二 2.1. 解决方案一 2.2. 解决方案二 在使用 fastjson 中的 JSONObject 有时候会遇到数据顺序发生了变化&#xff0c;而实际需求中需要保持原有的顺序。 1…