Redis 的集群 --- 数据分开扛
序言
上一章内容中我们介绍到了 哨兵 来保证我们主机在发生故障时能够及时地选出一个新的主机,但是哨兵地加入只是提供了 高可用性 和 故障转移,并没有真正的提升架构的性能。如果不断地加入新的数据的话,主机的压力会很大,一方面是内存占用,一方面是同步数据到从机。
现有的架构可能不是很好解决现在的问题,集群 来咯,数据分开存,大大减轻每一个主机的压力。具体怎么实现的呢?让我们开始吧。
一、集群的架构
集群会存在多个主机,每一个主机存储整体数据的一部分,每一个主机都会存在从机以防主机故障替换,整体的结构如下:

现在问题来了,怎么确定每一台主机存储了哪一些键呢?新加入的键加入到哪一个主机呢?咋们马上说到。
二、集群的工作原理
1. 集群的分片
现在笔者所知道的分片方式有三种:哈希取余,一致性哈希,哈希槽,相较最为全面的,也是现在所使用的是 哈希槽,我们来看看各自的优劣吧:
哈希取余法
首先获取一个键所对应的分区非常简单,就需要使用公式:
SLOT = hash(key) % N
在这里的 N 是我们的分区个数,非常简单吧,这是他最大的优势😙。但是当我们的分区个数发生变化时,需要将我们的整体数据重新映射到对应的分区,这个时候就涉及到大量的数据迁移的过程,代价非常高。
一致性哈希法
这个算法的提出就是解决了 哈希取余法 在增删分区时会涉及到大量的数据移动的问题。首先我们需要知道问题的起因是因为 N (分区个数)发生了变化,所以为了解决这个问题,直接将 N 的大小固定为 2^32,这样我们的 hash(key) % 2^32 的范围一定在 [0, 2^32 - 1] ,形成一个哈希环:

然后我们将分区提供某种方式也映射到哈希环上,现在我们插入或者是查找一个键的时候,我们先通过计算获知在哈希环上的位置,然后 顺时针 查找到第一个分区。
现在我们尝试加入一个新的分区,判断带来的影响:

我们在 A B 之间新加入了一个分区 C,可以得到如下结论:
- 原来属于 B 的部分数据(A->C) 需要迁移到 C 中
- 其他位置的数据不受影响,不需要迁移
这大大降低了我们的开销,因为只需要迁移整体的部分数据,但是这个方法会存在 数据倾斜 的问题,谁占有的弧长越长就代表着我们的数据越有可能分配到该分区上。
哈希槽法
这个方法其实和 一致性哈希法 非常类似,每一个分区管理一个区间。但是它解决了数据倾斜的问题,当加入新的分区的时候,每个分区的大小都会得到相应的调整,保证平衡负载。
哈希槽共有 16384 个,每个节点负责一部分槽:

如上图,比如需要新加入一个分区,我们只需要每一个分区各自迁移约 1365 槽到新的分区中管理即可。既兼顾了数据迁移带来的开销,又兼顾了数据倾斜带来的问题。
2. 加入新的结点
现在需要在现有的集群当中加入一个新的结点,首先我需要一个介绍人,这个介绍人是现在集群当中的任意一个结点,之后通过 CLUSTER MEET 协议和这个中间人握手。握手成功之后,介绍人需要通告其他主机点我的存在。
可能这个集群中存在较多的主机点,如果介绍人挨个介绍我的话肯定成本非常大。所以使用了一个较为灵活的协议 Gossip(翻译过来是流言蜚语,还挺贴切的),具体思想是每个节点定期与集群中的其他节点交换状态信息。当一个节点知道了某些新的信息(如集群中某个节点的故障信息,新的结点加入),它会将这些信息传播给它所连接的其他节点,这些节点再继续将信息传播给它们各自的邻居。这样,集群中所有节点最终都能知道每个节点的状态。
现在大家都知道新节点的存在了,但是新的结点具有以下特征:
- 由于没有分配哈希槽,因此它不保存任何数据
- 因为它是一个没有分配槽的主服务器,所以当副本想要成为主服务器时,它不会参与选举过程
所以我们需要手动的给新的哈希槽,也就是管理数据的权限:
CLUSTER SETSLOT [<node_id>]
三、总结
感觉现在查到的资料都没有很详细的介绍一个结点故障转移的过程,容我再看看。
相关文章:
Redis 的集群 --- 数据分开扛
序言 上一章内容中我们介绍到了 哨兵 来保证我们主机在发生故障时能够及时地选出一个新的主机,但是哨兵地加入只是提供了 高可用性 和 故障转移,并没有真正的提升架构的性能。如果不断地加入新的数据的话,主机的压力会很大,一方面…...
微信小程序中缓存数据全方位解惑
微信小程序中缓存数据全方位解惑 微信小程序中的数据缓存是提升用户体验和优化性能的重要手段,跟电脑浏览器中的Local Storage的性质一样。以下是关于微信小程序数据缓存的相关知识点和示例的详细介绍: 1. 数据缓存的类型 微信小程序提供了两种数据缓…...
LeetCode 每日一题 2025/2/10-2025/2/16
记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录 2/10 913. 猫和老鼠2/11 1728. 猫和老鼠 II2/12 1760. 袋子里最少数目的球2/13 1742. 盒子中小球的最大数量2/14 1552. 两球之间的磁力2/15 1706. 球会落何处2/16 1299. 将…...
使用 Shiro 和 JPA 结合 MySQL 实现一个简易权限管理系统
1. 项目设置 首先,确保你的项目已经配置好 Maven 或 Gradle 依赖管理工具,并添加以下依赖: Maven 依赖 <dependencies><!-- Shiro 核心库 --><dependency><groupId>org.apache.shiro</groupId><artifactI…...
DeepSeek与医院电子病历的深度融合路径:本地化和上云差异化分析
一、引言 1.1 研究背景与意义 在医疗信息化快速发展的当下,电子病历系统已成为医院信息管理的核心构成。电子病历(EMR)系统,是指医务人员在医疗活动过程中,使用医疗机构信息系统生成的文字、符号、图标、图形、数据、影像等数字化信息,并能实现存储、管理、传输和重现的…...
设计模式:代理模式
代理模式是很常见的设计模式,即使没有专门学习过这种设计模式,在工作中也一定用过这种设计模式。在实际生活中,代理模式也是常见的,比如内阁首辅相对于皇帝,前者是后者的代理,内阁首辅收到奏折时࿰…...
141,【1】buuctf web [SUCTF 2019]EasyWeb
进入靶场 代码审计 <?php // 定义函数get_the_flag,功能是处理文件上传相关操作 function get_the_flag() {// 注释说明:webadmin会每隔20分钟删除用户上传的文件$userdir "upload/tmp_" . md5($_SERVER[REMOTE_ADDR]);// 检查用户目录…...
破解微服务疑难杂症:2025年全解决方案
微服务架构已经成为现代软件开发的主流选择,其优势在于能够将复杂的系统拆分为独立的服务模块,方便开发和维护。然而,在微服务的实施过程中,开发者往往会面临许多挑战,如服务间通信、数据一致性、性能优化和故障处理等…...
Node.js 中的 Event 模块详解
Node.js 中的 Event 模块是实现事件驱动编程的核心模块。它基于观察者模式,允许对象(称为“事件发射器”)发布事件,而其他对象(称为“事件监听器”)可以订阅并响应这些事件。这种模式非常适合处理异步操作和…...
EasyRTC嵌入式WebRTC视频通话SDK支持Web浏览器、Linux、ARM、Android、iOS
随着互联网技术的飞速发展,实时通信(RTC)已经成为现代应用中不可或缺的一部分。无论是视频会议、在线教育、远程医疗,还是社交娱乐,实时通信技术都在其中扮演着重要角色。 然而,WebRTC技术在PC和移动端的支…...
pycharm社区版有个window和arm64版本,到底下载哪一个?还有pycharm官网
首先pycharm官网是这一个。我是在2025年2月16日9:57进入的网站。如果网站还没有更新的话,那么就往下滑一下找到 community Edition,这个就是社区版了免费的。PyCharm:适用于数据科学和 Web 开发的 Python IDE 适用于数据科学和 Web 开发的 Python IDE&am…...
【玩转全栈】----Django模板语法、请求与响应
目录 一、引言 二、模板语法 三、传参 1、视图函数到模板文件 2、模板文件到视图函数 四、引入静态文件 五、请求与响应 ?1、请求 2、响应 六、综合小案例 1、源码展示 2、注意事项以及部分解释 3、展示 一、引言 像之前那个页面,太过简陋,而且一个完整…...
网络安全:挑战、技术与未来发展
📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 1. 引言 在数字化时代,网络安全(Cybersecurity)已成为全球关注的焦点。随着云计算、大数据、…...
DeepSeek 服务器繁忙的全面解决方案
目录 引文 正文 一、 服务器繁忙的原因分析 二、 解决方案 2.1切换网络 2.2使用网络加速工具 2.3错峰使用DeepSeek 2.4本地部署 2.5调用API 三、官方动态 一、技术研发与产品升级 二、市场合作与商业化进展 三、区域化布局与产业赋能 四、未来规划与社会责任 结语…...
将OpenWrt部署在x86服务器上
正文共:1234 字 40 图,预估阅读时间:2 分钟 如果你问ChatGPT有哪些开源的SD-WAN方案,他会这样答复你: 我们看到,OpenWrt也属于比较知名的开源SD-WAN解决方案。当然,在很久之前,我就发…...
计算机视觉:卷积神经网络(CNN)基本概念(一)
第一章:计算机视觉中图像的基础认知 第二章:计算机视觉:卷积神经网络(CNN)基本概念(一) 第三章:计算机视觉:卷积神经网络(CNN)基本概念(二) 第四章:搭建一个经典的LeNet5神经网络 一、引言 卷积神经网络&…...
企业文件共享中的权限管理与安全风险防范
在企业的日常运营中,文件共享是必不可少的一项工作。然而,文件共享过程中如果权限管理不当,极易引发安全风险,导致企业敏感信息泄露。因此,加强文件共享中的权限管理与安全风险防范,对于保障企业信息安全至…...
使用DeepSeek建立一个智能聊天机器人0.12
为了确保这段代码能够在Windows和Linux系统上都能正常运行,我考虑以下几个方面: 路径分隔符:在Windows和Linux中,文件路径的分隔符不同。Windows使用反斜杠(\),而Linux使用正斜杠(/)。我们可以使用 os.path.join 来处理路径,以确保跨平台兼容性。 消息框:tkinter.…...
国家队出手!DeepSeek上线国家超算互联网平台!
目前,国家超算互联网平台已推出 DeepSeek – R1 模型的 1.5B、7B、8B、14B 版本,后续还会在近期更新 32B、70B 等版本。 DeepSeek太火爆了!在这个春节档,直接成了全民热议的话题。 DeepSeek也毫无悬念地干到了全球增速最快的AI应用。这几天,国内的云计算厂家都在支持Dee…...
Deep seek学习日记1
Deepseek最强大的就是它的深度思考,并且展现了它的思考过程。 五种可使用Deep seek的方式(应该不限于这五种,后续嵌入deepseek的应该更多,多了解一点因为官网容易崩~~): 1.deep seek官网 2.硅基流动silicon…...
GeoBench:基于GeoGuessr的大语言模型地理定位能力评测框架实践
1. 项目概述:GeoBench——大语言模型的地理定位能力评测场 如果你玩过GeoGuessr,一定体验过那种仅凭一张街景图片,就要在全球范围内猜出具体位置的烧脑乐趣。现在,把这个挑战交给ChatGPT、Claude、Gemini这些大语言模型会怎样&…...
别再踩坑了!Windows下用Conda安装PyTorch GPU版,保姆级版本对照表与避坑指南
Windows下Conda安装PyTorch GPU版终极避坑手册 刚接触深度学习的开发者,十有八九会在PyTorch GPU版本安装上栽跟头。明明按照教程一步步操作,最后torch.cuda.is_available()却返回False,这种挫败感我深有体会。本文将带你直击问题核心——版…...
构建企业级.NET代码编辑器:ScintillaNET终极架构解析
构建企业级.NET代码编辑器:ScintillaNET终极架构解析 【免费下载链接】ScintillaNET A Windows Forms control, wrapper, and bindings for the Scintilla text editor. 项目地址: https://gitcode.com/gh_mirrors/sc/ScintillaNET 在.NET桌面应用开发领域&a…...
VSCode 2026农业插件开发,从Node.js 20.12到Rust WASM桥接——跨平台低功耗灌溉控制插件落地全链路
更多请点击: https://intelliparadigm.com 第一章:VSCode 2026农业物联网插件开发背景与架构概览 随着精准农业与边缘智能的加速融合,面向田间部署的轻量级开发工具需求激增。VSCode 2026 版本正式将农业物联网(Agri-IoT…...
在线调试、Mock 和 SDK 生成怎么设计?一次讲清开放平台的开发者体验能力
在线调试、Mock、SDK 生成为什么是开放平台的关键体验能力? 这篇直接按在线调试、Mock、SDK 生成来拆,不只讲“方便开发”,而是把开发者体验为什么会影响平台接入效率讲具体。 目标是你看完后,能把开放平台的开发者体验࿰…...
KaTeX安全考量:XSS防护和内容安全策略终极指南
KaTeX安全考量:XSS防护和内容安全策略终极指南 【免费下载链接】KaTeX Fast math typesetting for the web. 项目地址: https://gitcode.com/GitHub_Trending/ka/KaTeX KaTeX作为一款Fast math typesetting for the web的工具,在处理数学公式渲染…...
千问 LeetCode 2127.参加会议的最多员工数 public int maximumInvitations(int[] favorite)
这道题是图论中的经典问题,考察的是基环树的处理。🧠 题目分析1. 建模:将员工看作图的节点,favorite[i] 表示从节点 i 指向节点 favorite[i] 的一条有向边。 2. 图的结构:由于每个节点出度为 1,这个图由若…...
告别SAP RFC调用迷茫:用C# .NET Core 6封装一个自己的SAPHelper(附完整源码)
告别SAP RFC调用迷茫:用C# .NET Core 6封装一个自己的SAPHelper(附完整源码) 在企业级应用开发中,SAP系统集成往往是绕不开的话题。许多.NET开发者虽然掌握了基础的RFC调用技术,却在面对重复代码、类型安全缺失和连接管…...
ColabFold:免费在线蛋白质结构预测,让科研门槛归零
ColabFold:免费在线蛋白质结构预测,让科研门槛归零 【免费下载链接】ColabFold Making Protein folding accessible to all! 项目地址: https://gitcode.com/gh_mirrors/co/ColabFold ColabFold是一个革命性的蛋白质结构预测工具,它通…...
