Redis7——基础篇(五)

 前言:此篇文章系本人学习过程中记录下来的笔记,里面难免会有不少欠缺的地方,诚心期待大家多多给予指教。

基础篇:

  1. Redis(一)
  2. Redis(二)
  3. Redis(三)
  4. Redis(四)

接上期内容:上期完成了Redis的其他功能的学习。下面开始学习Redis的主从模式(重点),话不多说,直接发车。


一、定义

Redis主从模式是一种数据复制架构,在这个架构中,存在一个主节点(Master)和多个从节点(Slave)。主节点负责处理所有的写操作,然后将写操作产生的数据变化同步给从节点。从节点则主要负责处理读操作,通过复制主节点的数据来提供数据读取服务。

总结一句话:当master数据变化的时候,自动将新的数据异步或同步到其它slave数据库


二、功能

  1. 读写分离:主节点负责处理所有的写操作,确保数据的一致性和完整性。而从节点则主要承担读操作,它们通过复制主节点的数据来保持与主节点数据的同步。
  2. 容灾恢复:主节点正常运行时,持续将数据变化同步到从节点。当主节点因硬件故障、软件错误、人为误操作或自然灾害等原因出现故障时,系统能够快速切换到从节点继续提供服务。
  3. 数据备份:从节点周期性或实时地复制主节点的数据,在存储介质上形成数据副本。
  4. 负载均衡:读请求被分散到多个从节点上,使得系统能够更均衡地处理负载
  5. 水平扩容支持高并发:当系统面临高并发压力时,可以通过增加从节点的数量来进行水平扩容

三、实操

(一)、架构说明

在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:努力到底,让持续学习成为贯穿一生的坚守。学习笔记持续更新中。。。。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

矿用机车移动逆变电源设计(论文+源码)

1总体方案设计 本课题为矿用机车移动逆变电源的硬件电路设计&#xff0c;其整个架构如图2.1所示包括了:380V三相交流电&#xff0c;逆变电路&#xff0c;高频变压器&#xff0c;24V直流输出&#xff0c;控制电路&#xff0c;驱动电路&#xff0c;保护电路等等。 在工作原理上&…

深入浅出:0 - 1 背包问题的滚动数组解法

目录 一、引言二、0 - 1 背包问题概述2.1 问题定义2.2 具体示例 三、动态规划与滚动数组思路3.1 二维动态规划思路3.2 滚动数组优化思路 四、具体分析全过程4.1 初始化 dp 数组4.2 考虑物品 0&#xff08;重量为 1&#xff0c;价值为 15&#xff09;4.2.1 当 j 44.2.2 当 j 3…

spring学习(spring容器、加载配置文件方式、获取bean的方式)

目录 一、加载spring配置文件的几种方式。 &#xff08;0&#xff09;工程文件初始化。 &#xff08;1&#xff09;加载类路径下的配置文件。&#xff08;常见&#xff09; &#xff08;2&#xff09;加载文件绝对路径的配置文件。 &#xff08;3&#xff09;加载多个配置文件。…

DeepSeek-R1论文阅读及蒸馏模型部署

DeepSeek-R1论文阅读及蒸馏模型部署 文章目录 DeepSeek-R1论文阅读及蒸馏模型部署摘要Abstract一、DeepSeek-R1论文1. 论文摘要2. 引言3. DeepSeek-R1-Zero的方法3.1 强化学习算法3.2 奖励建模3.3 训练模版3.4 DeepSeek-R1-Zero的性能、自进化过程和顿悟时刻 4. DeepSeek-R1&am…

华为动态路由-OSPF-骨干区

华为动态路由-OSPF-骨干区 一、OSPF简介 1、OSPF概述 OSPF是一种开放式的、基于链路状态的内部网关协议&#xff08;IGP&#xff09;&#xff0c;用于在自治系统内部进行路由选择和通信。 OSPF是互联网工程任务组&#xff08;IETF&#xff09;定义的标准之一&#xff0c;被广…

RocketMQ - 常见问题

RocketMQ常见问题 文章目录 RocketMQ常见问题一&#xff1a;消息幂等问题1&#xff1a;什么是消费幂等2&#xff1a;消息重复的场景分析2.1&#xff1a;发送时消息重复2.2&#xff1a;消费时消息重复2.3&#xff1a;Rebalance时消息重复 3&#xff1a;通用解决方案3.1&#xff…

MySQL登录问题总结

不管何种数据库&#xff0c;使用的第一步都是先登录。 MySQL命令行登录语句&#xff1a;mysql -u username -P port -p -D database_name 登录MySQL的报错一般从报错信息都能得到反馈&#xff0c;常见报错原因分析如下&#xff0c;实例中的以test用户为例&#xff0c;登录环境为…

《千恋万花》无广版手游安卓苹果免费下载直装版

自取https://pan.xunlei.com/s/VOJS77k8NDrVawqcOerQln2lA1?pwdn6k8 《千恋万花》&#xff1a;柚子社的和风恋爱杰作 《千恋万花》&#xff08;Senren * Banka&#xff09;是由日本知名美少女游戏品牌柚子社&#xff08;Yuzusoft&#xff09;于2016年推出的一款和风恋爱题材…

【部署优化篇三】《DeepSeek边缘计算实战:把目标检测模型塞进树莓派,让AI在巴掌大的设备上“开天眼“》

“谁说只有超级计算机才能跑AI?今天咱们就要在树莓派上玩转DeepSeek目标检测,让这个巴掌大的小盒子变成会‘看’世界的智能终端!” 本文手把手教你从零开始,把最潮的目标检测模型塞进树莓派。全程高能预警,建议准备好你的树莓派4B/5和散热风扇,咱们这就开启边缘计算的魔法…

C++ Primer 类的作用域

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

如何在 VS Code 中快速使用 Copilot 来辅助开发

在日常开发中&#xff0c;编写代码往往是最耗时的环节之一。而 GitHub Copilot&#xff0c;作为一款 AI 编码助手&#xff0c;可以帮助开发者 自动补全代码、生成代码片段&#xff0c;甚至直接编写完整的函数&#xff0c;大幅提升编码效率。那么&#xff0c;如何在 VS Code 中快…

剑指 Offer II 024. 反转链表

comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20024.%20%E5%8F%8D%E8%BD%AC%E9%93%BE%E8%A1%A8/README.md 剑指 Offer II 024. 反转链表 题目描述 给定单链表的头节点 head &#xff0c;请反转链表&#xff…

通过API 调用本地部署 deepseek-r1 模型

如何本地部署 deepseek 请参考&#xff08;windows 部署安装 大模型 DeepSeek-R1&#xff09; 那么实际使用中需要开启API模式&#xff0c;这样可以无拘无束地通过API集成的方式&#xff0c;集成到各种第三方系统和应用当中。 上遍文章是基于Ollama框架运行了deepSeek R1模型…

【产品经理】需求分析方法论+实践

阐述了需求分析的基本认知&#xff0c;包括需求分析的定义、原则和内容。接着&#xff0c;文章详细介绍了需求分析的十个步骤&#xff0c;从收集需求到结果评审&#xff0c;为产品经理提供了清晰的操作指南。 作为产品经理&#xff0c;需求分析是一个最基本的工作&#xff0c;但…

【玩转 Postman 接口测试与开发2_020】(完结篇)DIY 实战:随书示例 API 项目本地部署保姆级搭建教程(含完整调试过程)

《API Testing and Development with Postman》最新第二版封面 文章目录 最新版《Postman 接口测试与开发实战》示例 API 项目本地部署保姆级搭建教程1 前言2 准备工作3 具体部署3.1 将项目 Fork 到自己名下3.2 创建虚拟环境并安装依赖3.3 初始运行与项目调试 4 示例项目的用法…

2025年02月19日Github流行趋势

项目名称&#xff1a;OmniParser 项目地址url&#xff1a;https://github.com/microsoft/OmniParser 项目语言&#xff1a;Jupyter Notebook 历史star数&#xff1a;12878 今日star数&#xff1a;2153 项目维护者&#xff1a;yadong-lu, ThomasDh-C, aliencaocao, nmstoker, kr…

侯捷 C++ 课程学习笔记:设计模式在面向对象开发中的应用

在侯捷老师的《C 面向对象开发》课程中&#xff0c;除了对面向对象编程的基础特性&#xff08;封装、继承和多态&#xff09;的深入讲解外&#xff0c;还引入了设计模式这一高级主题。设计模式是面向对象编程中的一种最佳实践&#xff0c;能够帮助开发者解决常见的设计问题&…

前七章综合练习

一&#xff0c;拓扑图 二&#xff0c;实验要求 不限 三&#xff0c;实验步骤 第一步&#xff0c;搭建拓扑图 如上 注意&#xff1a; 第二步&#xff0c;配置IP trust&#xff1a; client1 client2 fw untrusrt-1&#xff1a; fw r3 电信DNS 百度web-1 untrust-2&#xf…

个人shell脚本分享

在周一到周五做增量备份&#xff0c;在周六周日做完全备份 #!/bin/bash定义变量 SRC“/path/to/source” # 源目录 BKUP“/backup” # 备份主目录 FUL“KaTeX parse error: Expected EOF, got # at position 22: …ull" #̲ 完全备份目录 INC"BKUP/inc” # 增量备份…

C语言之函数封装技巧

目录 前言 一、函数在源代码中的三种状态 二、函数封装的运用 案例1&#xff1a;实现打印20以内的素数 案例2&#xff1a;存放因子数并返回长度 三、return返回与形参返回 四、<>与“” 五、解耦 总结 前言 在C语言中&#xff0c;函数封装是一种重要的技巧&#…