Redis 集群相关知识介绍
Redis 集群详解:从入门到实战
Redis 是一个高性能的开源数据库,支持多种数据结构,广泛应用于缓存、消息队列、实时分析等领域。随着业务规模的增长,单机 Redis 的性能和容量往往无法满足需求,因此 Redis 集群(Redis Cluster)应运而生。
本文将从零开始讲解 Redis 集群的相关知识点,并结合实际案例进行分析,帮助初级工程师快速掌握 Redis 集群的搭建、配置、优化及故障处理。
一、Redis 集群概述
1.1 什么是 Redis 集群?
Redis 集群是 Redis 官方提供的分布式解决方案,通过将数据分片存储在多个节点上,实现高可用性和高性能。集群中的每个节点都承担一部分数据的存储和处理任务。
1.2 Redis 集群的核心优势
- 高可用性:即使部分节点故障,集群仍然可以正常运行。
- 水平扩展:通过增加节点数,可以轻松提升集群的整体性能和容量。
- 自动分片:Redis 集群支持数据的自动分区(sharding),无需手动干预。
- 故障转移:当主节点故障时,从节点会自动晋升为主节点。
二、搭建 Redis 集群
2.1 环境准备
假设我们有一个简单的集群,包含 3 主 3 从(共 6 个节点),部署在不同的服务器上。以下是搭建集群的步骤:
2.1.1 安装 Redis
在每台服务器上安装 Redis。以 Ubuntu 为例:
sudo apt-get update
sudo apt-get install redis-server
2.1.2 配置 Redis 节点
编辑 Redis 配置文件 redis.conf
,设置以下内容:
- 端口号(如
6379
,6380
等) - 绑定 IP 地址
- 集群模式配置:
cluster-enabled yes cluster-config-file nodes.conf
2.1.3 启动 Redis 节点
在每台服务器上启动 Redis 实例:
redis-server /path/to/redis.conf
2.2 使用 redis-cli
创建集群
使用 Redis 提供的 redis-cli
工具创建集群:
redis-cli --cluster create <node1_ip:port> <node2_ip:port> ... --cluster-replicas 1
例如:
redis-cli --cluster create 192.168.1.100:6379 192.168.1.101:6379 192.168.1.102:6379 --cluster-replicas 1
2.3 验证集群状态
使用以下命令验证集群的状态:
redis-cli -c -h <任意节点的IP> -p <端口号>
127.0.0.1:6379> cluster info
如果输出包含 cluster_state:ok
,说明集群正常运行。
三、Redis 集群核心原理
3.1 数据分片
Redis 集群通过 哈希槽(Hash Slot) 实现数据分片。总共有 16384 个哈希槽,每个键根据其哈希值被映射到一个特定的哈希槽,再由集群决定该哈希槽在哪个节点上。
哈希槽分配
- 每个节点负责一定数量的哈希槽。
- 数据迁移时,可以通过重新分配哈希槽实现负载均衡。
3.2 节点发现机制
Redis 集群通过 ** gossip 协议** 实现节点间的自动发现和状态同步。每个节点会定期与集群中的其他节点交换信息,确保所有节点对集群的状态达成一致。
3.3 容量扩展
当需要增加容量时,可以通过添加新节点并将部分哈希槽迁移到新节点上实现动态扩展。迁移过程由 Redis 自动完成,不会影响集群的正常运行。
四、Redis 集群性能优化
4.1 网络配置
- 高带宽低延迟:确保集群节点之间的网络延迟尽可能小。
- 负载均衡:合理分配流量,避免单点过载。
4.2 数据分片策略
- 尽量避免跨槽操作(如
KEYS
、SCAN
等命令),因为这些操作需要遍历所有哈希槽。 - 使用前缀或哈希标签(如
{tag}key
)将相关数据存储在同一哈希槽。
4.3 主从复制策略
- 合理配置主从节点的数量,避免单点故障。
- 定期检查主从同步状态,确保数据一致性。
五、Redis 集群常见问题及解决方法
5.1 节点无法加入集群
原因:
- 防火墙或安全组配置阻止了节点间的通信。
- 指定的端口号已被其他进程占用。
解决方法:
- 检查防火墙和安全组设置,确保相关端口开放。
- 使用
netstat -anp | grep <port>
检查端口占用情况。
5.2 集群状态异常(cluster_state:fail
)
原因:
- 部分节点无法通信或宕机。
- 哈希槽分配不均,导致某些节点负载过高。
解决方法:
- 检查节点日志,排查具体问题。
- 使用
redis-cli --cluster reshard <node_ip:port>
重新分配哈希槽。
5.3 数据丢失或不一致
原因:
- 故障转移过程中出现异常。
- 主从复制延迟较高。
解决方法:
- 配置合适的主从同步策略(如
sync
和async
)。 - 定期检查数据一致性,使用
redis-cli --cluster check <node_ip:port>
工具验证集群状态。
六、Redis 集群进阶话题
6.1 跨槽查询的优化
在 Redis 集群中,跨槽操作(如事务或 Lua
脚本)需要特殊处理。可以通过以下方式优化:
- 使用 ** Redirection**:客户端发送请求时,Redis 会返回重定向指令,客户端重新将请求发送到正确的节点。
- 使用 ** Proxy 模式**:通过 Redis 的代理模式(如
twemproxy
或redis-proxy
)统一管理跨槽操作。
6.2 集群与 Sentinel 的结合
Redis Sentinel 是一个高可用性解决方案,可以监控 Redis 实例的状态并自动执行故障转移。将 Sentinel 与集群结合使用,可以进一步提升系统的稳定性和可靠性。
6.3 高可用架构设计
在实际应用中,建议采用以下架构:
- 多数据中心部署:实现跨机房的高可用性。
- 负载均衡层:通过 Nginx 或其他工具分发请求到不同的 Redis 节点。
- 监控与告警:实时监控集群状态,及时发现和处理异常。
七、总结
Redis 集群是 Redis 官方提供的分布式解决方案,能够有效提升系统的性能和可用性。通过本文的学习,初级工程师可以掌握 Redis 集群的基本概念、搭建方法、核心原理及优化技巧,并能够解决常见问题。
在实际应用中,建议根据业务需求合理设计集群架构,定期监控和维护集群状态,确保系统稳定运行。
相关文章:
Redis 集群相关知识介绍
Redis 集群详解:从入门到实战 Redis 是一个高性能的开源数据库,支持多种数据结构,广泛应用于缓存、消息队列、实时分析等领域。随着业务规模的增长,单机 Redis 的性能和容量往往无法满足需求,因此 Redis 集群…...
宏基传奇swift edge偶尔开机BIOS重置
电脑是acer swift edge, SFA16-41,出厂是Win11系统, BIOS版本出厂1.04,更新到了目前最新1.10。 问题是 会偶尔开机ACER图标变小跑到屏幕左上方,下次开机BIOS就会被重置,开机等待很长时间。 因为是偶尔现象的…...
DeepSeek是如何通过“蒸馏”技术打造自己的AI模型
1 引言: 最近,外媒对中国公司——DeepSeek进行了猛烈抨击,指控其采用了所谓的“蒸馏”(Distillation)技术,涉嫌抄袭甚至作弊。那么,什么是“蒸馏”技术? 在人工智能领域,…...
你如何利用SIMD(如SSE/AVX)优化图像处理的性能?
SIMD优化问题 1. SIMD 在图像处理中的优化方式2. 典型应用场景3. SIMD 的常见优化技巧4. 总结 利用 SIMD(Single Instruction, Multiple Data) 指令集(如 SSE/AVX/AVX2/AVX-512)优化图像处理的性能,可以极大地提升计算…...
支付宝 IoT 设备入门宝典(上)设备管理篇
相信不少朋友最近都被支付宝“碰一下”广告刷屏,“不用打开 APP 支付就碰一下”几个字一出简直自带BGM……其实“碰一下”就是支付宝 IoT 设备的一种,趁着热度还在,我会分为设备管理和设备经营上下两篇,简单介绍一下支付宝 IoT&am…...
Go语言 Web框架Gin
Go语言 Web框架Gin 参考 https://docs.fengfengzhidao.com https://www.liwenzhou.com/posts/Go/gin/#c-0-7-2 返回各种值 返回字符串 package mainimport ("net/http""github.com/gin-gonic/gin")func main() {router : gin.Default()router.GET("…...
蓝桥杯-洛谷刷题-day5(C++)(为未完成)
1.P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布 i.题目 ii.代码 #include <iostream> #include <string> using namespace std;int N, Na, Nb; //0-"剪刀", 1-"石头", 2-"布", 3-"蜥", 4-"斯"࿱…...
【Unity3D优化】使用ASTC压缩格式优化内存
在Unity3D手游开发中,合理选择纹理压缩格式对于优化内存占用、提高渲染效率至关重要。本文将记录近期在项目内进行的图片压缩格式优化过程,重点介绍从ETC2到ASTC 5x5的优化方案及其带来的收益。 1. 现状分析:从ETC2到ASTC 6x6 block 在项目…...
NO.13十六届蓝桥杯备战|条件操作符|三目操作符|逻辑操作符|!||||(C++)
条件操作符 条件操作符介绍 条件操作符也叫三⽬操作符,需要接受三个操作数的,形式如下: exp1 ? exp2 : exp3条件操作符的计算逻辑是:如果 exp1 为真, exp2 计算, exp2 计算的结果是整个表达式的结果&am…...
【uniapp-小程序】实现方法调用的全局tips弹窗
【uniapp-小程序】实现方法调用的全局tips弹窗 开发背景弹窗组件全局调用封装配置项入参全局注入使用 附带:如何在uniapp-H5项目中实现全局自定义弹窗组件定义定义vue插件引入 笑死,只有在想找工作的时候才会想更新博客。 开发背景 本来是个uniapp开发…...
springboot如何将lib和jar分离
遇到一个问题,就是每次maven package或者maven install后target中的jar很大,少的50几MB,大的100多兆 优化前: 优化后: 优化前 优化后压缩率77.2MB4.65MB93% 具体方案: pom.xml中 <build><…...
深入探索C语言中的字符串处理函数:strstr与strtok
在C语言的字符串处理领域, strstr 和 strtok 是两个非常重要的函数,它们各自承担着独特的功能,为开发者处理字符串提供了强大的支持。 一、strstr函数:字符串查找的利器 strstr 函数用于在一个字符串中查找另一个字符串的首次出现…...
Django学习笔记(第一天:Django基本知识简介与启动)
博主毕业已经工作一年多了,最基本的测试工作已经完全掌握。一方面为了解决当前公司没有自动化测试平台的痛点,另一方面为了向更高级的测试架构师转型,于是重温Django的知识,用于后期搭建测试自动化平台。 为什么不选择Java&#x…...
npm版本号标记
在 npm 中,版本号的标记遵循 语义化版本控制(Semantic Versioning, SemVer) 的规则,版本号通常由 主版本号(major)、次版本号(minor) 和 修订版本号(patch) 组成,格式为: <major>.<minor>.<patch>1. 版本号格式 主版本号(major):当你做了不兼…...
无人机雨季应急救灾技术详解
无人机在雨季应急救灾中发挥着至关重要的作用,其凭借机动灵活、反应迅速、高效安全等特点,为救灾工作提供了强有力的技术支撑。以下是对无人机雨季应急救灾技术的详细解析: 一、无人机在雨季应急救灾中的应用场景 1. 灾情侦查与监测 无人机…...
算法与数据结构(多数元素)
题目 思路 方法一:哈希表 因为要求出现次数最多的元素,所以我们可以使用哈希映射存储每个元素及其出现的次数。每次记录出现的次数若比最大次数大,则替换。 方法二:摩尔算法 摩尔的核心算法就是对抗,因为存在次数多…...
详解如何使用Pytest内置Fixture tmp_path 管理临时文件
关注开源优测不迷路 大数据测试过程、策略及挑战 测试框架原理,构建成功的基石 在自动化测试工作之前,你应该知道的10条建议 在自动化测试中,重要的不是工具 临时目录在测试中起着至关重要的作用,它为执行和验证代码提供了一个可控…...
量子计算的五大优势
量子计算的优势有哪些? 量子计算是一个快速发展的领域,有望彻底改变我们处理复杂计算问题的方式。那么,量子计算的优势是什么?与经典计算相比,量子计算又有哪些优势呢?当我们探索量子力学的世界以及量子系…...
行内元素和块级元素
行内元素和块级元素 1.行内元素1.1什么是行内元素1.2行内元素的特点1.3常见的行内元素 2.块级元素2.1什么是块级元素2.2块级元素的特点2.3常见的块级元素 3.行内元素和块级元素的区别 1.行内元素 1.1什么是行内元素 行内元素是指在网页中不会独占一行,而是与其他行内元素在同…...
java面试题-集合篇
Collection 1.Collection有哪些类? Java集合框架中的Collection接口是所有集合类的基础接口,定义了一些基本的集合操作,如添加元素、删除元素、判断是否包含某个元素等。常见的集合类包括List、Set和Queue。 List List接口定义了按照索引…...
二十九、vite项目集成webpack+vue2项目
一、开发 基座应用: 1、安装依赖 npm i @micro-zoe/micro-app@0.8.6 --save 2、在入口处引入(main.ts) import microApp from @micro-zoe/micro-appmicroApp.start()...
小程序之间实现互相跳转的逻辑
1:小程序之间可以实现互相跳转吗 可以实现互相跳转! 2:小程序跳转是否有限制 有限制!限制如下 2.1:需要用户触发跳转 从 2.3.0 版本开始,若用户未点击小程序页面任意位置,则开发者将无法调用此接口自动跳转至其他小程序。 2.2:需要用户确认跳转 从 2.3.0 版本开始…...
算法——数学建模的十大常用算法
数学建模的十大常用算法在数学建模竞赛和实际问题解决中起着至关重要的作用。以下是这些算法的具体信息、应用场景以及部分算法的C语言代码示例(由于篇幅限制,这里只给出部分算法的简要代码或思路,实际应用中可能需要根据具体问题进行调整和扩…...
cookie、session、jwt、Oauth2.0、sso 分别有什么用
cookie、session、jwt都是 web 应用中的认证方式,最早只有 cookie,后面觉得所有数据存储在客户端不安全,就出现了 cookie-session,再后面有了 jwt。 cookie工作原理 cookie 数据存储在用户的本地。服务器完全根据 cookie 确定访…...
maven使用默认settings.xml配置时,Idea基于pom.xml更新依赖时报错,有些组件下载时连接超时
1、问题背景:maven使用默认settings.xml配置时,Idea基于pom.xml更新依赖时报错,有些组件下载时连接超时, 通过日志发下,去连接maven.org网站下载依赖,有时候肯定会超时。 2、解决办法:使用国外…...
信息收集-Web应用搭建架构指纹识别WAF判断蜜罐排除开发框架组件应用
知识点: 1、信息收集-Web应用-架构分析&指纹识别 2、信息收集-Web应用-架构分析&WAF&蜜罐 3、信息收集-Web应用-架构分析&框架组件识别 指纹识别 EHole_magic https://github.com/lemonlove7/EHole_magic 指纹识别 Wappalyzer https://github.com…...
蓝桥杯之图
图: 对于图来说,重点在于之后的最短路径算法,这边简单做一下了解即可...
ProxySQL构建PolarDB-X标准版高可用路由服务三节点集群
ProxySQL构建PolarDB-X标准版高可用路由服务三节点集群 一、PolarDB-X标准版主备集群搭建 三台机器上传 polardbx 包,包可以从官网https://openpolardb.com/download获取,这里提供离线rpm。 1、上传 polardbx 安装包 到 /opt目录下 rpm -ivh t-pol…...
【leetcode】双指针:移动零 and 复写零
文章目录 1.移动零2.复写零 1.移动零 class Solution { public:void moveZeroes(vector<int>& nums) {for (int cur 0, dest -1; cur < nums.size(); cur)if (nums[cur] ! 0)swap(nums[dest], nums[cur]);} };class Solution { public:void moveZeroes(vector&l…...
正则化(Regularization)和正则表达式(Regular Expression)区别
文章目录 1. **正则化(Regularization)**2. **正则表达式(Regular Expression)**关键区别为什么名字相近? 正则化(Regularization)和正则表达式(Regular Expression)不是…...
【C++】C++-教师信息管理系统(含源码+数据文件)【独一无二】
👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。 【C】C教师信息管理系统(含源码&#x…...
MySql从入门到精通
第一部分 基础篇 1.概述 1.1 启动与停止MySql 启动 net start mysql80 停止 net stop mysql80 注意: mysql开机默认启动 1.2 客户端连接 方法一:使用MySQL提供的命令行客户端方法二:系统自带的命令行工具执行指令 mysql [-h 127.0.0.1] …...
27、深度学习-自学之路-NLP自然语言处理-做一个简单的项目识别一组电影评论,来判断电影评论是积极的,还是消极的。
一、如果我们要做这个项目,第一步我们要做的就是需要有对应的训练数据集。 这里提供两个数据集,一个是原始评论数据集《reviews.txt》,以及对应的评论是消极还是积极的数据集《labels.txt》,下面的程序就是找到这两个数据集&…...
微信小程序 - 组件和样式
组件和样式介绍 在开 Web 网站的时候: 页面的结构由 HTML 进行编写,例如:经常会用到 div、p、 span、img、a 等标签 页面的样式由 CSS 进行编写,例如:经常会采用 .class 、#id 、element 等选择器 但在小程序中不能…...
滤波总结 波形处理原理 如何对一个规律的波形进行滤波 显现出真正的波形 如何设计滤波
需要用到的软件:waveserialport vofa++ 1.波形想用MCU进行采集首先你要考虑到你的采集频率因为如果你的对象波形即你要采集的波形,他过于快速的话有一些MCU它是不能的比如说有一些它的主频才36兆72兆呢你如果遇到一个特别快的波形毫秒级别那他就检测不了 2.…...
【代码随想录】刷题记录(115)-岛屿数量(广搜)
题目描述: 题目描述 给定一个由 1(陆地)和 0(水)组成的矩阵,你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成,并且四周都是水域。你可以假设矩阵外均被水包围。 输入描…...
Git指南-从入门到精通
代码提交和同步命令 流程图如下: 第零步: 工作区与仓库保持一致第一步: 文件增删改,变为已修改状态第二步: git add ,变为已暂存状态 bash $ git status $ git add --all # 当前项目下的所有更改 $ git add . # 当前目录下的所有更改 $ g…...
uvm错误记录4
如下所示,奇怪的是penable莫名其妙的出X。可问题,我发送激励了。 仔细定位发现,39行用的是vif中的penable, 问题是都是赋值,却出现同时赋值多次,这是因为nonblocking和blocking同时触发导致的,因此…...
用大模型学大模型03-数学基础 概率论
https://metaso.cn/s/Jp0OU9w 提示词:我正在学习深度学习相关的数学知识,学到了概率论与统计学部分,给我一个入门级的完整教程和实例。 好的,我现在需要回答用户关于深度学习所需的概率论与统计学入门教程和实例的问题。用户希望得到一个完整…...
数字电路-基础逻辑门实验
基础逻辑门是数字电路设计的核心元件,它们执行的是基本的逻辑运算。通过这些基本运算,可以构建出更为复杂的逻辑功能。常见的基础逻辑门包括与门(AND)、或门(OR)、非门(NOT)、异或门…...
基于springboot轨道交通安全评估系统(源码+lw+部署文档+讲解),源码可白嫖!
摘要 时代在飞速进步,每个行业都在努力发展现在先进技术,通过这些先进的技术来提高自己的水平和优势,轨道交通安全评估管理当然不能排除在外。轨道交通安全评估系统是在实际应用和软件工程的开发原理之上,运用Java语言以及Spring…...
多能互补综合能源系统,改变能源结构---安科瑞 吴雅芳
多能互补综合能源系统是一种通过整合多种能源的形势(如电力、天然气、热能、冷能等)和多种能源技术(如可再生能源、储能技术、智能电网等),实现能源利用和配置调整的系统。其目标是通过多能互补和协同优化,…...
Python 量化
Python 量化是指利用 Python 编程语言以及相关的库和工具来进行金融市场数据分析、策略开发和交易执行的过程。 Python 由于其简洁、易学、强大的生态系统和丰富的金融库而成为量化交易的首选编程语言之一。 量化交易在金融领域得到广泛应用,它允许交易者通过系统…...
图数据库Neo4j面试内容整理-属性(Property)
在图数据库中,属性(Property)是用来描述节点(Node)和关系(Relationship)详细信息的键值对。属性可以附加到节点或关系上,用来存储具体的数据,如名字、年龄、时间戳、标签等。属性使得节点和关系不仅能够表示实体或交互,还能包含丰富的、与实体或交互相关的信息。 1. …...
uniapp - iconfont下载本地并且运用至项目上
1、项目中创建一个文件夹放置iconfont相关文件,例如src/assets/iconfont(名称自己定义) 2、在iconfont下载项目至本地 3、解压后把文件复制进1的文件夹中 4、修改src/assets/iconfont - iconfont.css里的font-face的src地址,修…...
leetcode 1594. 矩阵的最大非负积
题目如下 数据范围 示例 本题难就难在矩阵存在负数,我们可以先思考如果矩阵每个数都大于等于0那么很简单我们只需要维护左边和上面的最大值即可。那么如果遇到负数显然要得到最大值就要和左边和右边的最小值相乘。所以这里我们维护两个二维数组用于存从(0,0)开…...
Vue3 从入门到精通:全面掌握前端框架的进阶之路
一、Vue3 简介 Vue.js 是一款流行的 JavaScript 前端框架,用于构建用户界面。Vue3 作为 Vue.js 的重大升级版本,带来了诸多性能提升和新特性。它采用了 Proxy 实现数据响应式系统,优化了虚拟 DOM 算法,使得应用在运行时更加高效。…...
lightning.pytorch.callbacks内置的Callbacks介绍
PyTorch Lightning 提供了一些 内置回调 (Callback),可以在训练过程中自动执行 检查点保存、学习率调度、早停 等功能。通过使用 Trainer(callbacks=[...]) 来传入这些回调。 PyTorch Lightning 的 Callback 是一种强大的工具,允许用户在训练过程中插入自定义逻辑,而无需修…...
网络运维与网络安全技术分享
网络运维与网络安全介绍之二 在上阶段给大家基本介绍了网络运维与网络安全专业第一阶段的内容之后,接下来,我们就开始进入正式内容分享了! 第一阶段:运维基础与网络系统管理之Windows系统的安装部署以及常见Windows应用技巧。 在这…...
基于巨控GRM242Q-4D4I4QHE模块的农村供水自动化监控技术方案
一、系统架构设计 拓扑结构: 传感器层(液位/压力/流量)→ 巨控GRM242Q模块 → 4G网络 → 云平台 → 手机/PC监控端硬件配置: 核心设备:GRM242Q-4D4I4QHE模块(4DI/4DO/4AI/1485)传感器࿱…...