【redis】redis分片集群基础知识
1、基本概念
1.1定义
- 分片:数据按照某种规则(比如哈希)被分割成多个片段(或分片),每个片段被称为一个槽(slot)。槽是Redis分片集群中数据的基本单元。
- 节点:Redis分片集群由多个节点组成,每个节点都是一个独立的Redis服务器。每个节点都负责存储和处理一部分数据片段,并且节点之间相互通信以实现数据的路由和同步。
- 槽分配:在Redis分片集群中,每个槽都被分配给一个节点,节点负责存储和处理分配给它的槽中的数据。槽的分配可以由系统自动完成,也可以手动配置。
1.2Hash Slot
1.2.1简介
- Hash Slot(哈希槽)在Redis集群中是一个核心概念,主要用于实现数据的分布式存储和处理。
- Hash Slot是Redis Cluster数据分片的核心单元。
- 在Redis集群中,整个键空间被划分为固定数量的哈希槽,每个槽位是一个逻辑分区。
- 默认情况下,Redis集群包含16384个哈希槽,编号从0到16383。
- Redis使用CRC16算法来计算键的哈希值,并通过对16383取模来决定键应该放置在哪个哈希槽上。
- Redis集群中的哈希槽数量是固定的,且不可更改。因此,在创建集群时需要合理规划节点数量和哈希槽的分配方式。
1.2.2作用
- Hash Slot用于将数据分散到多个节点上,以实现水平扩展和负载均衡。
- 当客户端执行对数据的读写操作时,Redis会根据数据的键计算出一个哈希值,然后根据这个哈希值将数据分配到相应的哈希槽上,最终决定存放在哪个节点上。
1.2.3分配
- 在Redis集群中,每个节点负责管理一部分哈希槽。例如,如果集群有3个节点,哈希槽可能会被分配为:节点A包含0到5500号哈希槽,节点B包含5501到11000号哈希槽,节点C包含11001到16384号哈希槽。
- 当有新的节点加入集群或者节点发生故障时,哈希槽会重新分配,从而保持数据的均衡分布。
1.2.4特性
- Hash Slot的概念使得Redis集群能够实现高可用性和可扩展性,因为数据被均匀地分布在多个节点上,并且每个节点只负责管理一部分哈希槽。
- 当节点出现故障时,只有该节点上的哈希槽中的数据会受到影响,其他节点上的数据仍然可用。
- 故障节点的哈希槽可以被重新分配到其他健康的节点上,从而保持数据的完整性和可用性。
2、特性优势
- 水平扩展:Redis集群的节点数量可以根据需要进行动态调整,添加或删除节点不会影响集群的性能或可靠性。
- 负载均衡:通过智能路由算法将请求分配到不同的节点上,以提高并发性和系统可用性。
- 数据分散:将相同键值的数据分散存储在不同节点上,最大限度地提高可用性,并优化网络带宽。
- 数据副本:每个节点都拥有自己的数据副本,以保证数据安全和可靠性。
- 自动故障转移:当Redis集群中的某个节点出现故障时,系统可以自动迁移该节点上的数据,并将其重新分配到其他健康的节点上,从而保持集群的可用性。
3、配置实现
1. 环境准备
- 准备多台服务器或虚拟机来部署Redis分片集群。
- 确保每台服务器上已经安装了Redis。
2. 配置文件配置
- 在每台服务器的Redis配置文件中,设置集群相关的参数。
cluster-enabled yes:开启集群功能。cluster-config-file nodes.conf:指定集群配置文件名称(这个文件不需要手动创建,Redis会自动生成和维护)。cluster-node-timeout 5000:节点间超时互联的阈值(单位:毫秒)。- 根据实际情况设置其他参数,如端口号、密码等。
3. 启动所有Redis节点
- 在每台服务器上启动Redis服务。
4. 创建集群
- 使用Redis提供的工具(如
redis-cli)来创建集群。 <nodeX-ip>:<nodeX-port>是每个Redis节点的IP地址和端口号。--cluster-replicas 1表示每个主节点有一个从节点。
5. 分配槽位
- 在Redis集群中,整个键空间被划分为16384个哈希槽(slot),需要将这些槽位分配给各个主节点。
- 可以使用
redis-cli的CLUSTER ADDSLOTS命令手动分配槽位,但在实际使用中,Redis通常会自动完成槽位的分配。
6. 测试集群
- 使用
redis-cli连接到集群中的任意一个节点,并执行一些读写操作来测试集群是否正常工作。 - 需要注意的是,在连接集群时需要加上
-c参数,以启用集群模式。
4、集群中的数据操作
4.1 数据的存储和读取
- 哈希槽(Slot):Redis将整个键空间划分为16384个哈希槽(slot)。每个键通过哈希函数(如CRC16)计算得到一个哈希值,然后对16384取模,确定其所属的槽。
- 数据路由:当客户端发送写请求(如SET key value)或读请求(如GET key)时,Redis集群首先根据键的哈希值确定其所属的槽,然后将请求路由到负责该槽的节点进行存储或读取。
4.2 数据的写入
- 节点选择:通过哈希算法计算出键所属的槽后,Redis集群将请求路由到负责该槽的主节点(Master node)进行数据的写入。
- 数据复制:为了提高数据的可用性和容错性,Redis分片集群通常会对数据进行复制。每个槽中的数据通常会有一个或多个副本(Replica),这些副本存储在不同的节点上。当主节点宕机时,系统会自动选举一个从节点(副本节点)来成为新的主节点,从而保证数据的可用性。
4.3 数据的读取
- 路由过程:与写入操作类似,当客户端发送读请求时,Redis集群首先确定键所属的槽,然后将请求路由到负责该槽的节点进行数据的读取。
- 读取偏好:在某些情况下,客户端可以选择从主节点或从节点读取数据。从节点通常用于读取操作,以减轻主节点的负载。但是,从节点的数据可能会有一定的延迟,因为从节点是异步复制主节点的数据。
4.4 客户端支持
- 客户端库:客户端库(如Jedis、Lettuce等)会维护集群的槽分配信息。当客户端发出请求时,客户端库会根据槽分配信息将请求路由到正确的节点。如果集群配置发生变化(如重新分片),客户端库会更新槽分配信息。
- 集群状态监控:Redis提供了监控集群状态的工具(如redis-cli、redis-trib.rb等),可以通过命令行或Web界面查看集群的实时状态、数据流量、QPS等信息。
相关文章:
【redis】redis分片集群基础知识
1、基本概念 1.1定义 分片:数据按照某种规则(比如哈希)被分割成多个片段(或分片),每个片段被称为一个槽(slot)。槽是Redis分片集群中数据的基本单元。节点:Redis分片集…...
Python 面试【★★★★】
欢迎莅临我的博客 💝💝💝,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…...
Knife4j 2.2.X 版本 swagger彻底禁用
官方文档配置权限:https://doc.xiaominfo.com/v2/documentation/accessControl.html#_3-5-1-%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%E5%B1%8F%E8%94%BD%E8%B5%84%E6%BA%90 通常有时候我们碰到的问题如下: 在开发Knife4j功能时,同很多开发者经常讨论的问…...
linux下mysql的定时备份
备份是容灾的基础,是指为了防止系统出现操作或系统故障导致数据丢失,而将全部或部分数据集合从应用主机的硬盘或阵列复制到其他的存储介质的过程为什么备份 硬件故障软件故障误操作病毒入侵保留历史记录灾难性事件 存储介质 光盘磁带硬盘磁盘阵列DAS:直接…...
【13】地址-比特币区块链的地址
1. 比特币区块链的地址 这就是一个真实的比特币地址:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa。这是史上第一个比特币地址,据说属于中本聪。 比特币地址是完全公开的,如果你想要给某个人发送币,只需要知道他的地址就可以了。实际上,所谓的地址,只不过是将公钥表示成人类可读…...
【数据结构】数据结构前置知识
这里写目录标题 基本概念与术语数据数据元素数据项数据对象数据结构 逻辑结构和物理结构物理结构顺序存储结构链式存储结构 逻辑结构集合结构线性结构树形结构图形结构 算法时间复杂度和空间复杂度大O的渐进表示法时间复杂度常数阶线性阶对数阶平方阶常见时间复杂度 空间复杂度…...
企业数据挖掘平台产品特色及合作案例介绍
泰迪企业数据挖掘平台是一款通用的、企业级、智能化的数据分析模型构建与数据应用场景设计工具,能够一体化地完成数据集成、模型构建、模型发布,为数据分析、探索、服务流程提供支撑,提供完整的数据探索、多数据源接入、特征处理、模型搭建、…...
C++初学者指南-3.自定义类型(第一部分)-基本自定义类型/类
C初学者指南-3.自定义类型(第一部分)-基本自定义类型/类 文章目录 C初学者指南-3.自定义类型(第一部分)-基本自定义类型/类1.类型种类(简化)2.为什么选择自定义类型?单向计数器提升序列 3.限制成员访问成员函数公共(public) vs. 私有(private…...
iOS之如何创建.framework静态库
番外:想要查看如何创建.a静态库可前往看我iOS之如何创建.a静态库-CSDN博客这篇文章。 一、创建framework项目 创建framework工程要选择iOS --> Cocoa Touch Framework输入项目名称PrintFramework也是编译生成的framework的名称。framework的名称也可以以后在项目…...
C程序设计谭浩强第五版
程序习题 第一章1、第5题2、第6题 第三章1、第2题2、第2题3、第3题4、第4题Tips 第一章 1、第5题 编写一个C程序,运行时输出以下图形: #include <stdio.h> int main() {for (int i 0; i < 4; i) // 输出4行循环控制{for (int j 0; j < i; j) //第几行就输出几…...
石油化工厂为什么要用专业防爆手机?
防爆手机之所以必须使用专业设计的产品,主要是出于安全考虑,以防止在易燃易爆环境中因手机使用不当引发爆炸事故。以下几点详细解释了使用专业化工防爆手机的必要性: 本质安全设计:顶坚专业防爆手机采用了本质安全(本安…...
文本生成sql模型(PipableAI/pip-sql-1.3b)
安装环境 pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 pip install transformers 代码 question "What are the email address, town and county of the customers who are of the least common gender?"sc…...
机器学习中的数学底蕴与设计模式
在说机器学习设计模式之前,想多说几句,在进入软件行业最初的10年,那时候耳熟能详的基本就是多线程编程,互斥同步锁,设计模式,OOA,OOP,常规数组,tree,图的数据…...
【Android面试八股文】性能优化相关面试题:如何查找CPU占用?
文章目录 一、 如何查找CPU的占用问题二、TraceView的使用关于TraceView和Android Studio的Profiler第一步、通过Android studio 打开`Android profiler`第二步、使用步骤第三步、技术说明第四步、CPU占用相关指标说明扩展阅读一、 如何查找CPU的占用问题 在Android开发中,如…...
面试框架一些小结
springcloud的⼯作原理 springcloud由以下⼏个核⼼组件构成: Eureka:各个服务启动时,Eureka Client都会将服务注册到Eureka Server,并且Eureka Client还可以反过来从Eureka Server拉取注册表, 从⽽知道其他服务在哪⾥ …...
c# 往window注册表写入数据后,未写入指定的路径
c# 往window注册表写入数据后,未写入指定的路径 最近在用c#开发一个往注册表写入数据的一个项目,发现将输入写入 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell这个路径时,数据并没写入到这个…...
树莓派4B_OpenCv学习笔记13:OpenCv颜色追踪_程序手动调试HSV色彩空间_检测圆
今日继续学习树莓派4B 4G:(Raspberry Pi,简称RPi或RasPi) 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1: OpenCv颜色追踪_程序手动调试HSV色彩空间_检测灰度图中的…...
Golang | Leetcode Golang题解之第198题打家劫舍
题目: 题解: func rob(nums []int) int {if len(nums) 0 {return 0}if len(nums) 1 {return nums[0]}first : nums[0]second : max(nums[0], nums[1])for i : 2; i < len(nums); i {first, second second, max(first nums[i], second)}return se…...
基于ruoyi-app的手机短信登录(uniapp)
本篇用于记录h5的框架搭建 组件地址:短信验证码登陆,手机号,验证码倒计时 - DCloud 插件市场 调整后的表单组件代码: <template><view class"login-view"><!-- <input type"tel" confirm-type"确认"…...
机器学习环境搭建
前言 个人笔记,记录框架和小问题,没有太详细记载。。 1、Anaconda安装 下载地址: Free Download | Anaconda (慢) 国内镜像:https://link.csdn.net/?targethttp%3A%2F%2Fitcxy.xyz%2F241.html 下载…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
