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

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

mhr18 2025-03-28 18:57 21 浏览 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)的关键组成部分。

相关推荐

B站收藏视频失效?mybili 收藏夹备份神器完整部署指南

本内容来源于@什么值得买APP,观点仅代表作者本人|作者:羊刀仙很多B站用户都有过类似经历:自己精心收藏的视频突然“消失”,点开一看不是“已被删除”,就是“因UP主设置不可见”。而B站并不会主动通知...

中间件推荐初始化配置

Redis推荐初始化配置bind0.0.0.0protected-modeyesport6379tcp-backlog511timeout300tcp-keepalive300...

Redis中缓存穿透问题与解决方法

缓存穿透问题概述在Redis作为缓存使用时,缓存穿透是常见问题。正常查询流程是先从Redis缓存获取数据,若有则直接使用;若没有则去数据库查询,查到后存入缓存。但当请求的数据在缓存和数据库中都...

后端开发必看!Redis 哨兵机制如何保障系统高可用?

你是否曾在项目中遇到过Redis主服务器突然宕机,导致整个业务系统出现数据读取异常、响应延迟甚至服务中断的情况?面对这样的突发状况,作为互联网大厂的后端开发人员,如何快速恢复服务、保障系统的高可用...

Redis合集-大Key处理建议

以下是Redis大Key问题的全流程解决方案,涵盖检测、处理、优化及预防策略,结合代码示例和最佳实践:一、大Key的定义与风险1.大Key判定标准数据类型大Key阈值风险场景S...

深入解析跳跃表:Redis里的"老六"数据结构,专治各种不服

大家好,我是你们的码农段子手,今天要给大家讲一个Redis世界里最会"跳科目三"的数据结构——跳跃表(SkipList)。这货表面上是个青铜,实际上是个王者,连红黑树见了都要喊声大哥。...

Redis 中 AOF 持久化技术原理全解析,看完你就懂了!

你在使用Redis的过程中,有没有担心过数据丢失的问题?尤其是在服务器突然宕机、意外断电等情况发生时,那些还没来得及持久化的数据,是不是让你夜不能寐?别担心,Redis的AOF持久化技术就是...

Redis合集-必备的几款运维工具

Redis在应用Redis时,经常会面临的运维工作,包括Redis的运行状态监控,数据迁移,主从集群、切片集群的部署和运维。接下来,从这三个方面,介绍一些工具。先来学习下监控Redis实时...

别再纠结线程池大小 + 线程数量了,没有固定公式的!

我们在百度上能很轻易地搜索到以下线程池设置大小的理论:在一台服务器上我们按照以下设置CPU密集型的程序-核心数+1I/O密集型的程序-核心数*2你不会真的按照这个理论来设置线程池的...

网络编程—IO多路复用详解

假如你想了解IO多路复用,那本文或许可以帮助你本文的最大目的就是想要把select、epoll在执行过程中干了什么叙述出来,所以具体的代码不会涉及,毕竟不同语言的接口有所区别。基础知识IO多路复用涉及...

5分钟学会C/C++多线程编程进程和线程

前言对线程有基本的理解简单的C++面向过程编程能力创造单个简单的线程。创造单个带参数的线程。如何等待线程结束。创造多个线程,并使用互斥量来防止资源抢占。会使用之后,直接跳到“汇总”,复制模板来用就行...

尽情阅读,技术进阶,详解mmap的原理

1.一句话概括mmapmmap的作用,在应用这一层,是让你把文件的某一段,当作内存一样来访问。将文件映射到物理内存,将进程虚拟空间映射到那块内存。这样,进程不仅能像访问内存一样读写文件,多个进程...

C++11多线程知识点总结

一、多线程的基本概念1、进程与线程的区别和联系进程:进程是一个动态的过程,是一个活动的实体。简单来说,一个应用程序的运行就可以被看做是一个进程;线程:是运行中的实际的任务执行者。可以说,进程中包含了多...

微服务高可用的2个关键技巧,你一定用得上

概述上一篇文章讲了一个朋友公司使用SpringCloud架构遇到问题的一个真实案例,虽然不是什么大的技术问题,但如果对一些东西理解的不深刻,还真会犯一些错误。这篇文章我们来聊聊在微服务架构中,到底如...

Java线程间如何共享与传递数据

1、背景在日常SpringBoot应用或者Java应用开发中,使用多线程编程有很多好处,比如可以同时处理多个任务,提高程序的并发性;可以充分利用计算机的多核处理器,使得程序能够更好地利用计算机的资源,...

取消回复欢迎 发表评论: