redis之分片集群

news2025/2/1 16:00:00

0. 前言

在海量的数据面前,单个 redis 实例的能力是有限的,无可能无限增大的内存,所以必须要构建分片集群,来横向拓展来支持保存更多的数据。

1. 分片集群是什么?

分片集群主要是将 redis 的数据划分成多份,每一份都由一个实例来保存,然后由多个实例来组成一个一个集群。

为什么使用分片集群而不是增加内存?

  • 在 RDB 进行持久化时,会 fork 子进程来完成,fork 操作会阻塞主线程的时长与数据量成正比。
  • 硬件成本,把内存从 32GB 扩展到 64GB 还算容易,但是,要想扩充到 1TB,成本太高。

2. 分片集群的组建

在 Redis Cluster 方案中,一个切片集群有 16384 个哈希槽,每个键值对的 key 会进行计算并对 16384 取模,分配到一个对应编号的哈希槽。

在使用 cluster create 命令创建集群时,会自动将 16384 个槽平均分配到集群实例中。也可以通过 cluster meet 命令手动建立 2 实例间的连接形成集群,再使用 cluster addslots 命令指定每个实例上的饿哈希槽的个数。

在手动分配哈希槽时,需要把 16384 个槽都分配完,否则 Redis 集群无法正常工作。

数据分配到哪个实例?

数据根据分配到哈希槽编号写入到对应的实例中。

3. 客户端如何读取分片集群

客户端从哪个实例中读取数据?

客户端与集群建立连接后,实例会将哈希槽的分配信息发送给客户端。客户端将哈希槽信息缓存在本地,当客户端操作键值对时,先计算得到对应的哈希槽,再发送请求到相应的实例。

但哈希槽与实例的映射关系并不是一成不变的,可能会发生变化:

  • 集群中,实例有新增或删除,redis 会重新分配哈希槽
  • 为了负载均衡,redis 会将哈希槽在所有实例中重新分布。

当映射关系变化时,客户端如何感知?

重定向机制。客户端发送数据给一个实例,但是并没有这个键值对的哈希槽信息,则实例会发送 MOVED 命令结果给客户端,包含新实例的访问地址。客户端更新本地缓存实例与哈希槽的映射关系,并向新实例发送请求。

GET hello:key
(error) MOVED 13320 172.16.19.5:6379

客户端请求的哈希槽 13320 在 172.16.19.5 这个实例上

如果访问的数据正在迁移的哈希槽,该如何访问数据?

Slot 2 正在从实例 2 往实例 3 迁移,key1 和 key2 已经迁移过去,key3 和 key4 还在实例 2。客户端向实例 2 请求 key2 后,就会收到实例 2 返回的 ASK 命令。

ASK 命令表示两层含义:第一,表明 Slot 数据还在迁移中;第二,ASK 命令把客户端所请求数据的最新实例地址返回给客户端,此时,客户端需要给实例 3 发送 ASKING 命令,然后再发送操作命令。

和 MOVED 命令不同,ASK 命令并不会更新客户端缓存的哈希槽分配信息。

ASK 命令的作用只是让客户端能给新实例发送一次请求,而不像 MOVED 命令那样,会更改本地缓存,让后续所有命令都发往新实例。

客户端为什么可以在任意一个实例获取所有的哈希槽信息?

redis 实例之间也会建立连接,分享自己的哈希槽信息。

4. 参考文章

  • 本文主要是学习《极客时间-redis 核心技术与实战》专栏总结而来

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

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

相关文章

BHG Mall 聚焦消费者需求,“超级宠粉节”缔造营销新高度

“如何读懂消费者?”处在行业关键转型期的购物中心,面临着这一待解的难题。 有哪些业态、品牌、商品让消费者着迷又上瘾?购物中心需要培养和消费者之间的默契,购物中心不仅要引领消费趋势、满足消费需求,还要深度融入…

Java+SSM宠物销售网站(含源码+论文+答辩PPT等)

项目功能简介: 该项目采用的技术实现如下: 后台框架:Spring、SpringMVC、MyBatis UI界面:JSP、jQuery 数据库:MySQL 该系统主要分为前台和后台两大功能模块,共包含两个角色:用户、管理员。 具体的系统功能如…

高分子PEG:DBCO-PEG-OPSS,OPSS-PEG-DBCO,二苯并环辛烯PEG邻吡啶二硫

【产品描述】 DBCO-PEG-OPSS中DBCO试剂可以自动标记叠氮化物修饰的生物分子,而不需要使用有毒的铜催化剂。聚乙二醇化可以提高多肽和蛋白质的溶解性和稳定性,降低其免疫原性。它还可以抑制带电分子与修饰表面的非特定结合。西安凯新生物科技有限公司点击…

html5:notification(浏览器通知)

一、notification简介 Web Notifications是HTML5 的一个特性,目前我知道的有谷歌浏览器和windows edge对它进行了支持,用于向用户配置和显示桌面通知。 二、notification方法 2.1静态方法 这些方法仅在 Notification 对象中有效。 Notification.requ…

5 种有效的电子邮件营销技巧可增加您的转化率

关键词:电子邮件营销、转化率 电子邮件营销是一种非常常见的策略,可以将客户吸引到您的网站并增加转化率。 由于如此普遍,消费者平均每天会收到 78 封新电子邮件。您的电子邮件周围充满了噪音。 那么,您可以做些什么来让您的电子邮…

架构师必读 —— 逻辑模型(10)

以零基础思考摆脱障碍 我们已养成了惰性思考及在其延伸下不断堆叠的思考习惯。 因为以往的方式未出现过重大错误,所以总以为会万无一失。 但是,如果用堆叠式思考方式继续沿用上一年度的做法的话,不管过多少年也很难破旧立新。有时我们有必要重…

第3章 管理端(Vue)布局面的设计实现

1 导入“element-plus:Icon”组件 1.1“element-plus:Icon” 组件导入命令: npm install element-plus/icons-vue 1.2“element-plus:Icon” 组件配置: import { createApp } from vue//在vue-cli4(4.5.…

关于A2B与DSP/DAC传输音频的时钟问题

加我V hezkz17 进同行数字音频系统设计开发交流答疑群 1 AD2428----->某功放DSP 是通过IN3输入音频数据 为什么 BCLK 和LRCLK 没有连接TDM时钟 ? 2 新改的板子 用IN1作为音频数据输入 IN1和 OUTPUT3 都是使用 A2B的TDM时钟 因为OUTPUT3 是上行TDM8 用作回传音和录音的…

用好这个任务管理工具,轻松躲避职场明枪暗箭

俗话说:“职场如战场”,而战场上,就不可避免地存在着形形色色的人,以及竞争与对立关系。升职、加薪、都是足以让人心动的诱惑,有利益存在的地方,就有勾心斗角,明坑暗亏。 正所谓,明…

简述 MySQL 的字符集和比较规则(简洁明了)

字符集和比较规则 字符集的概念: 人们抽象出一个字符集的概念来描述某个字符范围的编码规则。 比较规则的概念: 对于某一种字符集来说,可以制定用来比较字符大小的多种规则,也就是说同一种字符集可以有多种规则。 最常用的 U…

阿根廷夺冠!梅西圆梦!历届世界杯还有哪些数据看点?

从1930年到2022年,世界杯已走过92年的光辉岁月,从马拉多纳的“上帝之手”、贝利的“四两拨千斤”、罗纳尔迪尼奥的“诡异吊射”、范佩西的“鱼跃冲顶”再到姆巴佩上演“帽子戏法”刷新记录,世界杯为球迷朋友们带来了无数个惊心动魄的精彩瞬间…

链表(1)-------数据结构

链表(重点): 链表是物理存储结构上面非连续的存储结构,数据元素的逻辑顺序是通过链表中的引用链接次序实现的 1)在顺序表中,我们不光引入了一段连续的内存,还引入了一块连续的内存空间,叫做usedsize,来表示对应数组中…

Opencv(C++)笔记--Canny边缘检测算法

目录 1--算法原理 2--Opencv API 3--代码实例 1--算法原理 具体原理讲解可参考博客1 和 博客2,算法主要步骤如下: ① 使用高斯模糊(高斯滤波)去除噪声; ② 进行灰度转换,转换为灰度图; ③ 计…

数据结构---动态规划

动态规划爬楼梯问题解法1第一步第二步第三步JAVA实现解法2问题建模最优子结构边界状态转移公式求解问题递归JAVA实现备忘录算法JAVA实现解法三JAVA实现(斐波那契数列)国王和金矿一个错误的解法排列组合解法JAVA实现动态规划爬楼梯问题 有一座高度是10级…

rk3568 添加gc2053摄像头驱动

在设备树文件代码中添加 gc2053 设备节点 &i2c2 {status "okay";pinctrl-0 <&i2c2m1_xfer>;/* split mode: lane0/1 */gc2053: gc205337 {status "okay";compatible "galaxycore,gc2053";// 需要与驱动中的匹配字符串一致reg …

高级篇-rabbitmq的高级特性

1.消息可靠性 三种丢失的情形&#xff1a; 1.1 生产者确认机制 启动MQ 创建Queues&#xff1a; 两种Callback: 1.ReturnCallback:全局callback 2.ComfirmCallback: 发送信息时候设置 Testpublic void testSendMessage2SimpleQueue() throws InterruptedException {// 1.…

第八章练习题-3

目录 第十三题 题目 Student类 Teacher类 main类 老师的代码 Student类 Teacher类 main类 第七问&#xff1a;定义多态数组 main类 运行结果 问题 原因 解决办法 老师代码&#xff1a;main类 结果 第八问 运行结果 第十四题 第十五题 题目 方法的多态…

HFSS使用经验三

目录 一、如何量取HFSS某一点的空间位置 二、如何快速的切换视图 三、HFSS中绘制圆柱体 四、如何修改HFSS的仿真线程数量 五、HFSS中如何选取挖空的面 六、HFSS中如何实现参数扫描 一、如何量取HFSS某一点的空间位置 右击可以点击Measure按键 鼠标放到特殊点&#xff0c…

2023年申请发明专利的重要性和注意问题。

随着对知识产权意思的逐步提高&#xff0c;企业对知识产权越来越关心。知识产权包括专利权、商标权和著作权。专利包含发明专利专利、实用新型专利、外观设计专利。其中发明专利的申请难度最大&#xff0c;含金量最高。根据小编申请发明专利方面20年的经验&#xff0c;简单介绍…

【Windows|WSL|Ubuntu|VSCode】流程记录|坑点模糊回忆

无限踩坑&#xff0c;悲惨回忆&#xff0c;又似乎毫无意义&#xff1f; 1.安装WSL 官方文档&#xff1a;Install WSL | Microsoft Learn 简单来说&#xff0c;管理员身份运行PowerShell wsl --install 通常需要wsl2&#xff0c;得益于其优势&#xff0c;通过 PowerShell w…