Redis7——基础篇(五)
前言:此篇文章系本人学习过程中记录下来的笔记,里面难免会有不少欠缺的地方,诚心期待大家多多给予指教。
基础篇:
- Redis(一)
- Redis(二)
- Redis(三)
- Redis(四)
接上期内容:上期完成了Redis的其他功能的学习。下面开始学习Redis的主从模式(重点),话不多说,直接发车。
一、定义
Redis主从模式是一种数据复制架构,在这个架构中,存在一个主节点(Master)和多个从节点(Slave)。主节点负责处理所有的写操作,然后将写操作产生的数据变化同步给从节点。从节点则主要负责处理读操作,通过复制主节点的数据来提供数据读取服务。
总结一句话:当master数据变化的时候,自动将新的数据异步或同步到其它slave数据库。
二、功能
- 读写分离:主节点负责处理所有的写操作,确保数据的一致性和完整性。而从节点则主要承担读操作,它们通过复制主节点的数据来保持与主节点数据的同步。
- 容灾恢复:主节点正常运行时,持续将数据变化同步到从节点。当主节点因硬件故障、软件错误、人为误操作或自然灾害等原因出现故障时,系统能够快速切换到从节点继续提供服务。
- 数据备份:从节点周期性或实时地复制主节点的数据,在存储介质上形成数据副本。
- 负载均衡:读请求被分散到多个从节点上,使得系统能够更均衡地处理负载
- 水平扩容支持高并发:当系统面临高并发压力时,可以通过增加从节点的数量来进行水平扩容
三、实操
(一)、架构说明
在VMWare上装三台虚拟机,三台虚拟机都装上Redis,一台Master,两台slave。

(二)、三大命令
1、“主从复制”
配从(库)不配主(库)
replication 主库IP 主库端口
2、“改换门庭”
改换门庭指:主节点宕机,slave连接到新的主节点上。
slave 新主库IP 新主库端口
3、“自立为王”
自立为王指:slave从从节点晋升为主节点。
slave no one
(三)、细节操作
1、开启daemonize
主从都改

2、注释掉bind 127.0.0.1
主从都改

3、设置protected-mode no
主从都改

4、指定端口
主机不用指定默认6379,改从机,分别对应6380,6381

5、修改存储目录
主从都改。在/myredis目录下面新建backups文件夹


6、修改pid名字,方便辨识
主机不修改,改从机,一般加上端口即可。

7、修改日志文件名
主从都改,一般加上端口即可。在/myredis目录新建logs日志目录。方便后续排查问题。


8、设置访问客户端密码
自己学习建议主从都设置一样。

9、修改rdb文件名
主从都改,一般加上端口即可。

10、修改aof文件
主从都改,一般加上端口即可。


11、设置从机访问主机IP和通行密码
主机不用,从机必须加。
在从机上配置Master:
replicaof <masterip> <masterport>

查看IP地址命令

12、最终效果图
一台Master,两台slave。



13、设置防火墙
一定要配置正确,不然主从无法通信,一直搭建不起来。我在这里栽了大坑。我建议临时关闭防火墙。
临时关闭防火墙命令
systemctl stop firewalld
临时开启防火墙命令
systemctl start firewalld
(四)、常用模式
1、"一主二从"
所谓一主二从指的是一台Master,两台slave。启动主从模式有两种方案,一种是配置(永久生效),一种是手动(临时生效,redis宕机失效)。
1.1、方案一
1、先启动Master,在启动两台slave。
Master启动,不需要带端口号

如果发现从机启动不了,优先排查防火墙问题。(三台虚拟机都临时关闭防火墙),然后在看日志。
从机启动需要带上端口号
redis-cli -a xxx -p 6380


2、主从关系查看
主从关系查看分两种方式:
- 命令查看:
info replication

- 日志查看:进入/myredis/logs目录下,用vim打开日志

1.2、方案二
1、移除配置项
移除slave中replicaof的配置项。

2、启动三台redis服务



3、执行命令
从机执行命令。
slaveof 主机IP 主机端口号
6380执行后:
6381执行后:
查看Master信息:
主从模式通过命令配置成功。
1.3、主从模式Q&A
Q1:从机可以执行写命令吗?
A:不可以。主从模式的优点就是可以进行读写分离。Master写,slave读。

Q2:从机是从头开始复制还是从切入点复制?
A:假设Master已经启动成功,slave1也跟着一起启动成功,slave2在Maseter写到k3的时候才启动成功。此时slave2才加入,那么slave2第一次同步为全量同步,后续,Master写一个,slave跟写一个。
一句话:什么时候变成slave,什么时候全量继承Master,其后在增量同步。

6380:

6381此时还没启动成功:

由于我们手动移除了配置文件,所以只能通过命令实现主从关系。

Q3:主机宕机后,从机会上位吗?
A:不会,从机只会成为望夫石,等待Master的归来。
Master关机:

6380、6381不会上位:


Q4:主机宕机后,重新启动成功后,主从关系还存在吗?
A:不管是通过命令还是配置方式构建的主从关系,主机宕机后,重启成功后,主从关系依旧存在。
Q5:从机宕机后,重新启动成功后,从机的数据能跟Master保持一致吗?
A:能保持一致。Q1做了测试。
Q6:通过命令配置的主从关系,重启后,主从关系还存在吗?
A:如果是通过命令配置的主从关系,主机没有宕机,从机宕机后重启,主从关系不存在。但是如果是主机宕机从机没有宕机,主机重启后,主从关系依旧存在。
2、"薪火相传"
薪火相传指的是在一主二从的模式下,其中的某台slave2变成了slave1的slave,但是不管slave1还是slave2的最终数据来源都是Master。
薪火相传的架构图:

2.1、实操
中途变更转向:会清除之前的数据,重新建立拷贝最新的。
将6381转变为6301的从机:

注意:虽然6380由slave变成了6381的Master,但是还是不具备写的权限,毕竟它还是6379的slave。

3、"反客为主"
反客为主指的是两台slave造反了,自己当老大,不给6379打工了。自此三分天下,各自为政。
3.1、实操
slaveof no one
注意:虽然自立为王,但是起家的资本不能丢。所以,slave本身已经同步的数据不会清除。


所以架构图变成了:

四、主从模式的流程和原理
1、slave启动,同步初清
slave启动成功连接到master后会发送一个sync命令,slave首次全新连接master,第一次完全同步(全量复制)将被自动执行,slave自身原有数据会被master数据覆盖清除。

2、首次连接,全量复制
master节点收到sync命令后会开始在后台保存快照(即RDB持久化,主从复制时会触发RDB),同时收集所有接收到的用于修改数据集命令缓存起来,master节点执行RDB持久化完后,master将rdb快照文件和所有缓存的命令发送到所有slave,以完成一次完全同步。而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中,从而完成复制初始化。
3、心跳持续,保持通信
master发出PING包的周期,默认是10秒。
4、进入平稳,增量复制
Master继续将新的所有收集到的修改命令自动依次传给slave,完成同步。
5、从机下线,重连续传
当slave下线后,重新启动,master会检查backlog里面的offset,master和slave都会保存一个复制的offset和masterId,offset是保存在backlog中的。Master只会把已经复制的offset后面的数据复制给Slave,类似断点续传。

五、主从模式优劣势对比
优势
- 提高读写性能:通过读写分离,能够显著提升系统在高并发场景下的读写能力。
- 数据备份:多节点的数据冗余保证了数据的安全性,降低了数据丢失的风险。
- 易于扩展:可以方便地添加从节点来应对不断增长的读请求。
劣势
- 写操作单点问题:所有写的操作都集中在主节点,如果主节点出现故障,在故障转移期间,写操作会受到影响。
- 数据一致性问题:由于主从节点之间的数据同步存在一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。
六、总结
Redis主从模式是一种简单而有效的架构,能够满足大部分应用场景对于读写性能和数据安全的需求。通过合理配置和使用主从模式,可以大大提升系统的性能和稳定性。然而,在实际应用中,也需要充分考虑其存在的劣势,采取相应的措施来解决可能出现的问题,希望本文能帮助大家对Redis主从模式有更深入的理解和应用。
ps:努力到底,让持续学习成为贯穿一生的坚守。学习笔记持续更新中。。。。
相关文章:
Redis7——基础篇(五)
前言:此篇文章系本人学习过程中记录下来的笔记,里面难免会有不少欠缺的地方,诚心期待大家多多给予指教。 基础篇: Redis(一)Redis(二)Redis(三)Redis&#x…...
spring boot知识点1
1.什么是spring boot spring boot是spring框架的子项目,主要特点是自动配置,以及内置的tomcat服务器,适合快速开发web与微服务架构 2.spring boot和spring cloud俩者之间的联系 spring boot可单独运行, spring cloud则是用于多…...
从零搭建微服务项目Base(第7章——微服务网关模块基础实现)
前言: 在前面6章的学习中已经完成了服务间的调用实现,即各微服务通过nacos或eureka服务器完成服务的注册,并从nacos中拉取配置实现热更新。当某个服务接口需要调用其他服务时,通过feign定义接口,并通过注解配置服务名…...
pdf转换成word在线 简单好用 支持批量转换 效率高 100%还原
pdf转换成word在线 简单好用 支持批量转换 效率高 100%还原 在数字化办公的浪潮中,文档格式转换常常让人头疼不已,尤其是 PDF 转 Word 的需求极为常见。PDF 格式虽然方便阅读和传输,但难以编辑,而 Word 格式却能灵活地进行内容修…...
嵌入式音视频开发(二)ffmpeg音视频同步
系列文章目录 嵌入式音视频开发(零)移植ffmpeg及推流测试 嵌入式音视频开发(一)ffmpeg框架及内核解析 嵌入式音视频开发(二)ffmpeg音视频同步 嵌入式音视频开发(三)直播协议及编码器…...
SpringBoot速成概括
视频:黑马程序员SpringBoot3Vue3全套视频教程,springbootvue企业级全栈开发从基础、实战到面试一套通关_哔哩哔哩_bilibili 图示:...
微信小程序image组件mode属性详解
今天学习微信小程序开发的image组件,mode属性的属性值不少,一开始有点整不明白。后来从网上下载了一张图片,把每个属性都试验了一番,总算明白了。现总结归纳如下: 1.使用scaleToFill。这是mode的默认值,sc…...
Matlab写入点云数据到Rosbag
最近有需要读取一个点云并做处理后,重新写回rosbag。网上有很多读取的教程,但没有写入。自己写入时也遇到了很多麻烦,踩了一堆坑进行记录。 1. rosbag中一个lidar的msg有哪些信息? 通过如下代码,先读取一个rosbag的l…...
数据分析--数据清洗
一、数据清洗的重要性:数据质量决定分析成败 1.1 真实案例警示 电商平台事故:2019年某电商大促期间,因价格数据未清洗导致错误标价,产生3000万元损失医疗数据分析:未清洗的异常血压值(如300mmHgÿ…...
iNeuOS工业互联网操作系统,民爆远程运维平台案例
iNeuOS工业互联网操作系统,民爆远程运维平台案例 目 录 1. 概述... 2 2. iNeuOS在民爆生产厂区和北京运维中心配置... 3 1.1 生产厂区配置... 3 1.2 运维中心配置... 7 1. 概述 针对本项目进行初步调研,项目的总体需求为满足新建…...
用命令模式设计一个JSBridge用于JavaScript与Android交互通信
用命令模式设计一个JSBridge用于JavaScript与Android交互通信 在开发APP的过程中,通常会遇到Android需要与H5页面互相传递数据的情况,而Android与H5交互的容器就是WebView。 因此要想设计一个高可用的 J S B r i d g e JSBridge JSBridge,不…...
Vue 3最新组件解析与实践指南:提升开发效率的利器
目录 引言 一、Vue 3核心组件特性解析 1. Composition API与组件逻辑复用 2. 内置组件与生命周期优化 3. 新一代UI组件库推荐 二、高级组件开发技巧 1. 插件化架构设计 2. 跨层级组件通信 三、性能优化实战 1. 惰性计算与缓存策略 2. 虚拟滚动与列表优化 3. Tree S…...
计算机网络(涵盖OSI,TCP/IP,交换机,路由器,局域网)
一、网络通信基础 (一)网络通信的概念 网络通信是指终端设备之间通过计算机网络进行的信息传递与交流。它类似于现实生活中的物品传递过程:数据(物品)被封装成报文(包裹),通过网络…...
JVM-Java程序的运行环境
Java Virtual Machine Java程序的运行环境 JVM组成 程序计数器 线程私有的,内部保存的字节码的行号。用于记录正在执行的字节码指令的地址。 Java堆 线程共享的区域: 主要用来保存对象实例, 数组等, 当堆中没有内存空间可分配给实例也无法再扩展时, 则抛出OutOfMe…...
什么是网关,网关的作用是什么?网络安全零基础入门到精通实战教程!
1. 什么是网关 网关又称网间连接器、协议转换器,也就是网段(局域网、广域网)关卡,不同网段中的主机不能直接通信,需要通过关卡才能进行互访,比如IP地址为192.168.31.9(子网掩码:255.255.255.0)和192.168.7.13(子网掩码…...
makefile+LSF
LSF LSF(Load Sharing Facility)是一种常用的集群作业调度系统,bsub 命令用于提交作业到 LSF 集群,而若要关闭(终止)一个正在运行的作业,需要使用 bkill 命令,下面为你详细介绍相关…...
《千恋万花》无广版手游安卓苹果免费下载直装版
自取https://pan.xunlei.com/s/VOJS77k8NDrVawqcOerQln2lA1?pwdn6k8 《千恋万花》:柚子社的和风恋爱杰作 《千恋万花》(Senren * Banka)是由日本知名美少女游戏品牌柚子社(Yuzusoft)于2016年推出的一款和风恋爱题材…...
javaEE-14.spring MVC练习
目录 1.加法计算器 需求分析: 前端页面代码: 后端代码实现功能: 调整前端页面代码: 进行测试: 2.用户登录 需求分析: 定义接口: 1.登录数据校验接口: 2.查询登录用户接口: 前端代码: 后端代码: 调整前端代码: 测试/查错因 后端: 前端: lombok工具 1.引入依赖…...
rabbitmq五种模式的实现——springboot
rabbitmq五种模式的实现——springboot 基础知识和javase的实现形式可以看我之前的博客 代码地址:https://github.com/9lucifer/rabbitmq4j-learning 一、进行集成 (一)Spring Boot 集成 RabbitMQ 概述 Spring Boot 提供了对 RabbitMQ 的自…...
23. AI-大语言模型-DeepSeek赋能开发-Spring AI集成
文章目录 前言一、Spring AI 集成 DeepSeek1. 开发AI程序2. DeepSeek 大模型3. 集成 DeepSeek 大模型1. 接入前准备2. 引入依赖3. 工程配置4. 调用示例5. 小结 4. 集成第三方平台(已集成 DeepSeek 大模型)1. 接入前准备2. POM依赖3. 工程配置4. 调用示例…...
Educational Codeforces Round 174 (Rated for Div. 2)(ABCD)
A. Was there an Array? 翻译: 对于整数数组 ,我们将其相等特征定义为数组 ,其中,如果数组 a 的第 i 个元素等于其两个相邻元素,则 ;如果数组 a 的第 i 个元素不等于其至少一个相邻元素,则 …...
如何在本机上模拟IP地址
如何在本机上模拟IP地址 前言 在某些开发或测试场景中,我们可能需要在本机上模拟一个指定的 IP 地址,并让局域网内的其他设备能够通过该 IP 访问本机提供的服务(如 Web 服务)。 本文将详细介绍如何在 Windows 和 macOS 系统上实…...
C++二叉树:数据的“家族树”与高效检索的奥秘
C二叉树:数据的“家族树”与高效检索的奥秘 开篇小故事:图书馆的“智能目录” 想象一座古老的图书馆,藏书百万,却能在几秒内找到任意一本书。 秘密在于它的“智能目录系统”——一本巨大的家族树状手册: 每本书按主题…...
深入解析 Vue 项目中的缓存刷新机制:原理与实战
目录 前言1. Demo2. 知识拓展 前言 在 Vue 项目中,缓存通常用于存储用户信息、角色权限、系统设置等,以提高页面加载速度并减少 API 请求 这里使用 web-storage-cache 作为封装的本地存储工具,支持 localStorage 和 sessionStorage 方式存储…...
【嵌入式Linux应用开发基础】进程间通信(1):管道
目录 一、管道的基本概念 二、管道的工作原理 三、管道的类型 3.1. 匿名管道(Anonymous Pipe) 3.2. 命名管道(Named Pipe,FIFO) 四、管道的读写规则 4.1. 匿名管道的读写规则 4.2. 命名管道的读写规则 五、管…...
【DeepSeek】Mac m1电脑部署DeepSeek
一、电脑配置 个人电脑配置 二、安装ollama 简介:Ollama 是一个强大的开源框架,是一个为本地运行大型语言模型而设计的工具,它帮助用户快速在本地运行大模型,通过简单的安装指令,可以让用户执行一条命令就在本地运…...
DHCP详解,网络安全零基础入门到精通实战教程!
一、DHCP简介 DHCP(Dynamic Host Configuration Protocol),动态主机配置协议,是一个应用层协议。当我们将客户主机ip地址设置为动态获取方式时,DHCP服务器就会根据DHCP协议给客户端分配IP,使得客户机能够利用这个IP上网。 DHCP前身是BOOTP&am…...
蓝桥杯篇---IAP15F2K61S2中断
文章目录 前言简介中断源1.外部中断2.定时器中断3.串口中断4.ADC中断5.PCA中断6.SPI中断7.PWM中断 中断优先级中断相关寄存器1.IE2.IP3.TCON4.SCON 中断使用步骤1.配置中断源2.使能中断3.设置优先级4.编写中断服务程序5.清除中断标志 示例代码:外部中断使用示例代码…...
【Prometheus】prometheus结合pushgateway实现脚本运行状态监控
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…...
立创实战派ESP32-S3烧录小智AI指南
小智 AI 聊天机器人-开源项目介绍 本项目是一个开源项目,主要用于教学目的。我们希望通过这个项目,能够帮助更多人入门 AI 硬件开发,了解如何将当下飞速发展的大语言模型应用到实际的硬件设备中。无论你是对 AI 感兴趣的学生,还是…...
