当前位置: 首页 > news >正文

【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-cliCLUSTER 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定义 分片&#xff1a;数据按照某种规则&#xff08;比如哈希&#xff09;被分割成多个片段&#xff08;或分片&#xff09;&#xff0c;每个片段被称为一个槽&#xff08;slot&#xff09;。槽是Redis分片集群中数据的基本单元。节点&#xff1a;Redis分片集…...

Python 面试【★★★★】

欢迎莅临我的博客 &#x1f49d;&#x1f49d;&#x1f49d;&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…...

Knife4j 2.2.X 版本 swagger彻底禁用

官方文档配置权限&#xff1a;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 通常有时候我们碰到的问题如下&#xff1a; 在开发Knife4j功能时,同很多开发者经常讨论的问…...

linux下mysql的定时备份

备份是容灾的基础&#xff0c;是指为了防止系统出现操作或系统故障导致数据丢失&#xff0c;而将全部或部分数据集合从应用主机的硬盘或阵列复制到其他的存储介质的过程为什么备份 硬件故障软件故障误操作病毒入侵保留历史记录灾难性事件 存储介质 光盘磁带硬盘磁盘阵列DAS:直接…...

【13】地址-比特币区块链的地址

1. 比特币区块链的地址 这就是一个真实的比特币地址:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa。这是史上第一个比特币地址,据说属于中本聪。 比特币地址是完全公开的,如果你想要给某个人发送币,只需要知道他的地址就可以了。实际上,所谓的地址,只不过是将公钥表示成人类可读…...

【数据结构】数据结构前置知识

这里写目录标题 基本概念与术语数据数据元素数据项数据对象数据结构 逻辑结构和物理结构物理结构顺序存储结构链式存储结构 逻辑结构集合结构线性结构树形结构图形结构 算法时间复杂度和空间复杂度大O的渐进表示法时间复杂度常数阶线性阶对数阶平方阶常见时间复杂度 空间复杂度…...

企业数据挖掘平台产品特色及合作案例介绍

泰迪企业数据挖掘平台是一款通用的、企业级、智能化的数据分析模型构建与数据应用场景设计工具&#xff0c;能够一体化地完成数据集成、模型构建、模型发布&#xff0c;为数据分析、探索、服务流程提供支撑&#xff0c;提供完整的数据探索、多数据源接入、特征处理、模型搭建、…...

C++初学者指南-3.自定义类型(第一部分)-基本自定义类型/类

C初学者指南-3.自定义类型(第一部分)-基本自定义类型/类 文章目录 C初学者指南-3.自定义类型(第一部分)-基本自定义类型/类1.类型种类&#xff08;简化&#xff09;2.为什么选择自定义类型&#xff1f;单向计数器提升序列 3.限制成员访问成员函数公共(public) vs. 私有(private…...

iOS之如何创建.framework静态库

番外&#xff1a;想要查看如何创建.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) //第几行就输出几…...

石油化工厂为什么要用专业防爆手机?

防爆手机之所以必须使用专业设计的产品&#xff0c;主要是出于安全考虑&#xff0c;以防止在易燃易爆环境中因手机使用不当引发爆炸事故。以下几点详细解释了使用专业化工防爆手机的必要性&#xff1a; 本质安全设计&#xff1a;顶坚专业防爆手机采用了本质安全&#xff08;本安…...

文本生成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…...

机器学习中的数学底蕴与设计模式

在说机器学习设计模式之前&#xff0c;想多说几句&#xff0c;在进入软件行业最初的10年&#xff0c;那时候耳熟能详的基本就是多线程编程&#xff0c;互斥同步锁&#xff0c;设计模式&#xff0c;OOA&#xff0c;OOP&#xff0c;常规数组&#xff0c;tree&#xff0c;图的数据…...

【Android面试八股文】性能优化相关面试题:如何查找CPU占用?

文章目录 一、 如何查找CPU的占用问题二、TraceView的使用关于TraceView和Android Studio的Profiler第一步、通过Android studio 打开`Android profiler`第二步、使用步骤第三步、技术说明第四步、CPU占用相关指标说明扩展阅读一、 如何查找CPU的占用问题 在Android开发中,如…...

面试框架一些小结

springcloud的⼯作原理 springcloud由以下⼏个核⼼组件构成&#xff1a; Eureka&#xff1a;各个服务启动时&#xff0c;Eureka Client都会将服务注册到Eureka Server&#xff0c;并且Eureka Client还可以反过来从Eureka Server拉取注册表&#xff0c; 从⽽知道其他服务在哪⾥ …...

c# 往window注册表写入数据后,未写入指定的路径

c# 往window注册表写入数据后&#xff0c;未写入指定的路径 最近在用c#开发一个往注册表写入数据的一个项目&#xff0c;发现将输入写入 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell这个路径时&#xff0c;数据并没写入到这个…...

树莓派4B_OpenCv学习笔记13:OpenCv颜色追踪_程序手动调试HSV色彩空间_检测圆

今日继续学习树莓派4B 4G&#xff1a;&#xff08;Raspberry Pi&#xff0c;简称RPi或RasPi&#xff09; 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1&#xff1a; OpenCv颜色追踪_程序手动调试HSV色彩空间_检测灰度图中的…...

Golang | Leetcode Golang题解之第198题打家劫舍

题目&#xff1a; 题解&#xff1a; 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的框架搭建 组件地址:短信验证码登陆&#xff0c;手机号&#xff0c;验证码倒计时 - DCloud 插件市场 调整后的表单组件代码: <template><view class"login-view"><!-- <input type"tel" confirm-type"确认"…...

机器学习环境搭建

前言 个人笔记&#xff0c;记录框架和小问题&#xff0c;没有太详细记载。。 1、Anaconda安装 下载地址&#xff1a; Free Download | Anaconda &#xff08;慢&#xff09; ​ 国内镜像&#xff1a;https://link.csdn.net/?targethttp%3A%2F%2Fitcxy.xyz%2F241.html 下载…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...