百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

什么是Redis主从复制?(redis主从复制getshell)

mhr18 2025-03-28 18:57 28 浏览 0 评论

什么是 Redis 主从复制?

Redis 主从复制是一种数据复制技术,它允许你将一个 Redis 服务器(称为 主服务器,Master)的数据复制到一个或多个其他的 Redis 服务器(称为 从服务器,SlaveReplica)。

简单来说,主服务器负责处理所有的写操作(例如 SET, DEL, INCR 等),而从服务器则从主服务器同步数据,并可以处理读操作(例如 GET, LRANGE 等)。

你可以把主从复制想象成一个“老板”和多个“助手”:

  • 主服务器(老板): 负责接收客户的“指令”(写操作),并执行这些指令,同时记录下所有的“工作内容”(数据变更)。
  • 从服务器(助手): 时刻关注“老板”的工作记录,并“复制”这些记录,保持和“老板”的数据一致。助手可以帮助“老板”处理一些简单的“查询”(读操作),减轻“老板”的压力。

主从复制的主要作用和优势:

  1. 数据冗余和备份 (Data Redundancy and Backup):
  2. 从服务器是主服务器数据的副本。当主服务器发生故障时,从服务器仍然拥有完整的数据,可以作为数据备份使用,降低数据丢失的风险。
  3. 读写分离 (Read-Write Separation):
  4. 主服务器专注于处理写操作,从服务器可以处理读操作。这样可以将读请求分摊到多个从服务器上,提高系统的整体读取性能和并发能力。
  5. 特别是在读多写少的应用场景中,主从复制可以显著提升性能。
  6. 提高读取性能 (Read Scalability):
  7. 通过增加从服务器的数量,可以线性扩展系统的读取能力,应对高并发的读请求。
  8. 高可用性 (High Availability) 的基础:
  9. 主从复制是实现 Redis 高可用性的基础。虽然主从复制本身不能自动进行故障转移,但它是 Redis Sentinel 和 Redis Cluster 等高可用方案的基础组件。

主从复制的工作原理:

主从复制的建立和数据同步过程主要分为以下几个步骤:

  1. Slave 发起同步请求 (SYNC or PSYNC):
  2. 当一个 Slave 启动并配置为 Master 的 Slave 后,它会向 Master 发送 SYNC 或 PSYNC 命令(Redis 2.8 之后使用 PSYNC,更高效)。
  3. SYNC 命令会触发全量复制,PSYNC 命令会尝试增量复制(如果可能)。
  4. Master 执行 BGSAVE 并发送 RDB 文件 (Full Synchronization - 全量同步):
  5. 如果 Slave 是第一次连接 Master,或者无法进行增量复制,Master 会执行全量同步。
  6. Master 接收到 SYNC 命令后,会执行 BGSAVE 命令在后台生成 RDB 快照文件,同时将新的写命令缓存到缓冲区。
  7. Master 将生成的 RDB 文件发送给 Slave。
  8. Slave 接收到 RDB 文件后,会先清空自己的旧数据,然后加载 RDB 文件中的数据。
  9. Master 发送缓冲区中的写命令 (Command Propagation - 命令传播):
  10. 在发送 RDB 文件的同时,Master 会持续将新的写命令发送给 Slave。
  11. Slave 接收到这些写命令后,会立即执行,保持与 Master 数据的一致性。
  12. 后续的增量同步 (Incremental Synchronization - 增量同步):
  13. 如果 Slave 不是第一次连接,或者网络中断后重新连接,Redis 2.8 及以上版本会尝试使用 PSYNC 命令进行增量同步。
  14. Master 和 Slave 会维护一个复制偏移量 (replication offset),记录双方数据同步的位置。
  15. 如果 Slave 重新连接后,发现自己的偏移量和 Master 的偏移量之间存在差异,Master 只会发送差异部分的数据(即增量数据)给 Slave,而不是重新发送整个 RDB 文件,大大提高了同步效率。
  16. 心跳检测 (Heartbeat):
  17. Slave 会定期向 Master 发送 PING 命令进行心跳检测,确保连接正常。
  18. Master 也会定期检测 Slave 的状态。

主从复制的配置:

配置主从复制非常简单,只需要在 Slave 节点的 redis.conf 配置文件中添加一行配置:

复制代码slaveof  

例如,如果 Master 的 IP 地址是 192.168.1.100,端口是 6379,则 Slave 的配置应该为:

复制代码slaveof 192.168.1.100 6379

重启 Slave 节点后,它就会自动连接到指定的 Master 节点,并开始进行数据同步。

主从复制的特点和注意事项:

  • 异步复制 (Asynchronous Replication): Master 执行写命令后,不需要等待 Slave 同步完成就立即返回客户端。这保证了 Master 的高性能,但也意味着在极端情况下(例如 Master 突然宕机),可能会有少量数据尚未同步到 Slave,导致数据丢失。
  • 单向复制 (One-way Replication): 数据只能从 Master 复制到 Slave,不能反向复制。Slave 节点只能进行读操作,默认情况下不能进行写操作(除非配置为可读写,但不推荐)。
  • 读写分离的实现: 客户端需要根据业务需求,将写操作发送到 Master 节点,将读操作发送到 Slave 节点。可以使用客户端库或连接池来实现读写分离。
  • 故障转移需要手动处理: 当 Master 节点宕机时,需要手动将一个 Slave 节点提升为新的 Master 节点,并修改其他 Slave 节点的配置,以及通知客户端连接新的 Master。 这也是 Redis Sentinel 诞生的原因,Sentinel 可以实现自动故障转移。
  • 数据一致性: 由于是异步复制,Slave 节点的数据可能略微落后于 Master 节点,存在一定的延迟。在对数据一致性要求非常高的场景下,需要考虑这种延迟的影响。

总结:

Redis 主从复制是 Redis 高可用和高性能架构的基础。它通过数据冗余、读写分离和读扩展等特性,提高了 Redis 系统的可靠性和性能。虽然主从复制本身不能完全解决高可用性问题(例如自动故障转移),但它是构建更高级的 Redis 高可用方案(如 Sentinel 和 Cluster)的关键组成部分。

相关推荐

Java面试宝典之问答系列(java面试回答)

以下内容,由兆隆IT云学院就业部根据多年成功就业服务经验提供:1.写出从数据库表Custom中查询No、Name、Num1、Num2并将Name以姓名显示、计算出的和以总和显示的SQL。SELECT...

ADG (Active Data Guard) 数据容灾架构下,如何配置 Druid 连接池?

如上图的数据容灾架构下,上层应用如果使用Druid连接池,应该如何配置,才能在数据库集群节点切换甚至主备数据中心站点切换的情况下,上层应用不需要变动(无需修改配置也无需重启);即数据库节点宕机/...

SpringBoot多数据源dynamic-datasource快速入门

一、简介dynamic-datasourc是一个基于SpringBoot的快速集成多数据源的启动器,其主要特性如下:支持数据源分组,适用于多种场景纯粹多库读写分离一主多从混合模式。支持...

SpringBoot项目快速开发框架JeecgBoot——项目简介及系统架构!

项目简介及系统架构JeecgBoot是一款基于SpringBoot的开发平台,它采用前后端分离架构,集成的框架有SpringBoot2.x、SpringCloud、AntDesignof...

常见文件系统格式有哪些(文件系统类型有哪几种)

PART.01常见文件系统格式有哪些常见的文件系统格式有很多,通常根据使用场景(Windows、Linux、macOS、移动设备、U盘、硬盘等)有所不同。以下是一些主流和常见的文件系统格式及其特点:一...

Oracle MySQL Operator部署集群(oracle mysql group by)

以下是使用OracleMySQLOperator部署MySQL集群的完整流程及关键注意事项:一、部署前准备安装MySQLOperator通过Helm安装Operator到Ku...

LibreOffice加入"转向Linux"运动

LibreOffice项目正准备削减部分Windows支持,并鼓励用户切换到Linux系统。自Oracle放弃OpenOffice后,支持和指导LibreOffice开发的文档基金会对未来有着明确的观...

Oracle Linux 10发布:UEK 8.1、后量子加密、增强开发工具等

IT之家6月28日消息,科技媒体linuxiac昨日(6月27日)发布博文,报道称OracleLinux10正式发布,完全二进制兼容(binarycompatibility...

【mykit-data】 数据库同步工具(数据库同步工具 开源)

项目介绍支持插件化、可视化的数据异构中间件,支持的数据异构方式如下MySQL<——>MySQL(增量、全量)MySQL<——>Oracle(增量、全量)Oracle...

oracle关于xml的解析(oracle读取xml节点的属性值)

有时需要在存储过程中处理xml,oracle提供了相应的函数来进行处理,xmltype以及相关的函数。废话少说,上代码:selectxmltype(SIConfirmOutput).extract...

如何利用DBSync实现数据库同步(通过dblink同步数据库)

DBSync是一款通用型的数据库同步软件,能侦测数据表之间的差异,能实时同步差异数据,从而使双方始终保持一致。支持各种数据库,支持异构同步、增量同步,且提供永久免费版。本文介绍其功能特点及大致用法,供...

MYSQL存储引擎InnoDB(八十):InnoDB静态数据加密

InnoDB支持独立表空间、通用表空间、mysql系统表空间、重做日志和撤消日志的静态数据加密。从MySQL8.0.16开始,还支持为模式和通用表空间设置加密默认值,这允许DBA控制在这些模...

JDK高版本特性总结与ZGC实践(jdk高版本兼容低版本吗)

美团信息安全技术团队核心服务升级JDK17后,性能与稳定性大幅提升,机器成本降低了10%。高版本JDK与ZGC技术令人惊艳,且JavaAISDK最低支持JDK17。本文总结了JDK17的主要...

4 种 MySQL 同步 ES 方案,yyds!(两个mysql数据库自动同步的方法)

本文会先讲述数据同步的4种方案,并给出常用数据迁移工具,干货满满!不BB,上文章目录:1.前言在实际项目开发中,我们经常将MySQL作为业务数据库,ES作为查询数据库,用来实现读写分离,...

计算机Java培训课程包含哪些内容?其实就这六大块

不知不觉秋天已至,如果你还处于就业迷茫期,不如来学习Java。对于非科班小白来说,Java培训会更适合你。提前了解下计算机Java培训课程内容,会有助于你后续学习。下面,我就从六个部分为大家详细介绍...

取消回复欢迎 发表评论: