25 redis 中 cluster 集群的工作模式

前言

我们这里首先来看 redis 这边实现比较复杂的 cluster集群模式 

整个 cluster集群 中会包含多对 Master+Slave 的组合, 然后这多对 Master+Slave 来分解 16384 个 slot

然后 客户端这边 set, get 的时候, 先根据 key 计算对应存储的 slot, 然后 服务器这边响应 MOVED + 目标机器 给客户端, 然后客户端这边 重新连接目标机器, 然后 将原有的命令发送到 目标机器上面

服务器这边主要是如果目标slot在本机, 则进行业务处理, 否则进行一个 转发的处理

客户端这边的处理就是, 向服务器发送命令, 如果服务器正常响应, 则处理正常, 如果服务器返回 MOVED + 目标机器, 则连接目标机器, 然后发送命令 

所以 这个集群其实就是 转发 + 几对主从, 来实现的集群, 然后 主从本身提供了服务的高可用, 多备份, 完整性, 一致性 

转发 + 几对主从, 提升了集群的处理效率, 吞吐量等等 

 

 

客户端发送 set 命令

在客户端上面发送命令 “set name4 jerry”

ca791baea52e4049903cd554fc049808.png

 

 

服务器这边的 keyHash 处理

服务器这边的转发处理如下, 这里是转发的最终结果 

客户端目前连接的是 “192.168.220.132:7004”, 然后这里服务器根据 ”name4” 计算, 需要转发的机器是 “192.168.220.132:7005”, 以及 slot 是 8736

ffca7dcb379548248c56aa84e7af8923.png

 

计算 slot 的方式如下, 传入 “name4” 然后根据 keyHashSlot 进行 slot 的计算, 具体的计算规则 我们可以不用关心, 只需要知道 一个 key 会计算到一个固定的 slot 就行 

cd772f67a40d4d389caa1f4ebd1dd403.png

 

计算的方式如下, 如果是包含 “{” 和 “}” 计算 之间的部分, 基于 crc16(str) % 16384

否则计算 crc16(key) % 16384

a62d49caa9d8473292cd88005a1930dc.png

 

 

客户端这边的转发处理

这里打印了日志, 更新了 config.hostip, config.hostport 以及刷新了 prompt 的信息 

a56f8d0ff4c249c9bfc0c64339897e48.png

 

然后在外面的发送命令的循环中, 会重新和目标服务器建立间接, 然后重新发送命令 

cfa8629eaa094274adb92049ec51cd58.png

 

然后转发到目标服务端这边的时候, 客户端这边 调用堆栈如下

e43051ae732842a0b4596b847f74ac3f.png

 

 

目标服务端这边的业务处理

服务器这边的处理如下, 这个就是 常规意义上的真实的 set 命令的落地处理了 

39f3ecb0383d4eb99e83ce06bd2cc7c8.png

 

在 processCommand 中, 调用真实业务处理的是在这里, 在处理的末尾了 

7401f36bacab49268002f24509d2acff.png

 

然后上面的计算 keyHash, 计算集群节点跳转的处理, 是在上面的地方 

如果是计算出来, 是其他节点, 才跳转, 否则 继续往后走, 走正常执行业务的处理 

497b916aef2a44b68634b12aab4fa847.png

 

 

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python自动化测试如何自动生成测试用例?

汽车软件开发自动化测试攻略 随着软件开发在造车行业中占有越来越重要的地位,敏捷开发的思想在造车领域中也逐渐地被重视起来,随之而来的是整车厂对自动化测试需求越来越强烈。本文结合北汇在自动化测试方面的丰富经验,简单介绍一下实施自动…

VR虚拟仿真技术应用到外事警察岗位技能培训的场景及优势

VR治安民警常态化工作实战教学演练是一种利用VR虚拟现实制作和web3d开发技术进行治安民警培训和实战演练的新型教学模式。相较于传统的培训方式,VR治安民警常态化工作实战教学演练具有以下优点: VR实战是一种完全虚拟的实战训练方式,他可以根…

娱乐新拐点:TikTok如何改变我们的日常生活?

在数字时代的浪潮中,社交媒体平台不断涌现,其中TikTok以其独特的短视频内容在全球范围内掀起了一场娱乐革命。本文将深入探讨TikTok如何改变我们的日常生活,从社交互动、文化传播到个人创意表达,逐步改写了娱乐的新篇章。 短视频潮…

k8s节点not ready

开发小伙伴反应,发布应用失败。检查后发现有个虚拟机挂掉了 启动后先重启服务:(一般是自启动,自动拉起pod服务) service docker restart docker ps |grep kube-apiserver|grep -v pause|awk ‘{print $1}’|xargs -i …

三、Spring IoC 容器和核心概念

本章概要 组件和组件管理概念 什么是组件?我们的期待Spring充当组件管理角色(IoC)组件交给Spring管理优势 Spring IoC 容器和容器实现 普通和复杂容器SpringIoC 容器介绍SpringIoC 容器具体接口和实现类SpringIoC 容器管理配置方式 Spring I…

Android APP 常见概念与 adb 命令

adb 的概念 adb 即 Android Debug Bridge 。在窗口输入 adb 即可显示帮助文档。adb 实际上就是在后台开启一个 server,会接收 adb 的命令然后帮助管理,控制,查看设备的状态、信息等,是开发、测试 Android 相关程序的最常用手段。…

CVE-2023-50164 Apache Struts2漏洞复现

CVE-2023-50164 简介: 从本质上讲,该漏洞允许攻击者利用 Apache Struts 文件上传系统中的缺陷。它允许他们操纵文件上传参数并执行路径遍历。这种利用可能会导致在服务器上执行任意代码,从而导致各种后果,例如未经授权的数据访问…

微信小程序---使用npm包安装Vant组件库

在小程序项目中,安装Vant 组件库主要分为如下3步: 注意:如果你的文件中不存在pakage.json,请初始化一下包管理器 npm init -y 1.通过 npm 安装(建议指定版本为1.3.3) 通过npm npm i vant/weapp1.3.3 -S --production 通过y…

VUE-脚手架搭建

文章目录 一、概述二、前提准备1. 安装 node-js2. npm 镜像设置3. 安装 vs-code 三、脚手架搭建1. Vue-2 搭建1. Vue-3 搭建 一、概述 官网:http://cn.vuejs.org/ vue 有两个大版本,分别是 vue-2 和 vue-3,目前新项目的话用 vue-3 的会比较多…

【专题】树和二叉树的转换

目录 一、树转换成二叉树步骤一:加线——在兄弟之间加连线步骤二:抹线——除结点的左孩子外,去除其与其余孩子之间的关系步骤三:旋转——以树的根结点为轴心,将整树顺时针转45 二、二叉树转换成树步骤1:加线…

Spring Boot启动慢如何分析

如果发现项目启动慢,你知道怎么分析慢的原因吗? 分析方法 自定义监听器 SpringApplicationRunListener是Spring Boot中的一个接口,它的作用是在SpringApplication运行的各个阶段提供回调接口,以便我们可以在这些阶段执行自定义…

【期末复习向】长江后浪推前浪之ChatGPT概述

参考文章:GPT系列模型技术路径演进-CSDN博客 这篇文章讲了之前称霸NLP领域的预训练模型bert,它是基于预训练理念,采用完形填空和下一句预测任务2个预训练任务完成特征的提取。当时很多的特定领域的NLP任务(如情感分类&#xff0c…

解决下载huggingface模型权重无法下载的问题

文章目录 方法一(推荐)方法二方法三依然存在的问题 由于某些原因,huggingface的访问速度奇慢无比,对于一些模型(比如大语言模型LLM)的权重文件动辄几十上百G,如果用默认下载方式,很可能中断,这里推荐几种方式。 方法一…

论文自己改过后怎么降重 papergpt

大家好,今天来聊聊论文自己改过后怎么降重,希望能给大家提供一点参考。 以下是针对论文重复率高的情况,提供一些修改建议和技巧,可以借助此类工具: 论文自己改过后如何降重 在论文修改过程中,我们往往会对…

最新AI绘画Midjourney绘画提示词Prompt教程

一、Midjourney绘画工具 SparkAi【无需魔法使用】: sparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的…

VR云游打造沉浸式文旅新体验,延伸智慧文旅新业态

从“跃然纸上”到“映入眼帘”,随着国家数字化战略的深入实施,文旅产业的数字化转型正在不断加快,“沉浸式”逐渐成为了文旅消费新热点。VR技术与文旅产业相融合,新产品、新模式、新业态不断涌现,文旅资源逐渐“活”起…

ACT、NAT、NATPT和EASY-IP

目录 一、ACL 1.ACL 2.ACL的两种应用匹配机制 3.ACL的基本类型 4.ACL命令操作 5.ACL实验: 4.ACL的应用原则: 5.匹配原则: 二、NAT 1.NAT的原理及作用: 2.NAT分类 3.NAT配置 三、EASY-ip实验 四、NATPT 五、通配符 …

Nginx七层代理,四层代理 + Tomcat多实例部署

目录 1.tomcat多实例部署 准备两台虚拟机 进入pc1 pc2同时安装jdk 进入pc1 pc2安装tomcat PC1配置(192.168.88.50) 安装tomcat多实例 tomcat2中修改端口 启动tomcat1 tomcat2 分别在三个tomcat服务上部署jsp的动态页面 2.nginx的七层代理&…

使用opencv的Canny算子实现图像边缘检测

1 边缘检测介绍 图像边缘检测技术是图像处理和计算机视觉等领域最基本的问题,也是经典的技术难题之一。如何快速、精确地提取图像边缘信息,一直是国内外的研究热点,同时边缘的检测也是图像处理中的一个难题。早期的经典算法包括边缘算子方法…

使用set和emit在uni-app中实现响应式属性和自定义事件

在uni-app中,我们经常需要动态设置响应式属性,并且通过自定义事件来实现组件间的通信。这时,我们可以使用set和emit来轻松实现这些功能。 使用$set动态设置响应式属性 在Vue中,我们可以使用来动态设置响应式属性。在uniapp中使用…