一文带你深入理解Redis的主从架构

 更新时间:2023年09月12日 09:59:27   作者:半亩方塘立身  
Redis主从架构是一种分布式数据库架构,它包括一个主节点(Master)和一个或多个从节点(Slave),主节点处理所有写操作,从节点负责复制主节点的数据并处理读请求,本文将带大家深入理解Redis主从架构,需要的朋友可以参考下

Redis主从架构概述

Redis主从架构是一种分布式数据库架构,它包括一个主节点(Master)和一个或多个从节点(Slave)。主节点处理所有写操作,从节点负责复制主节点的数据并处理读请求。以下是主从架构的核心组件:

主节点(Master):

  • 主节点是Redis集群的核心,负责处理所有写操作。
  • 客户端连接到主节点,并向其发送写请求。
  • 主节点将写操作同步到所有连接的从节点,以保持数据一致性。

从节点(Slave):

  • 从节点是主节点的复制品,其数据与主节点保持同步。
  • 从节点可以处理读操作,但不允许进行写操作(只读)。
  • 如果主节点不可用,可以将从节点提升为新的主节点。

主从同步步骤

具体步骤如下:

1、从节点根据自身状态,发送 psync命令给 master:

  • 如果从实例从未执行过 replicaof ,则从节点发送 psync ? -1,代表全量,从 -1 处开始复制。
  • 如果从节点之前执行过 replicaof,则取当前实例中记录下 runID和 offset,执行命令 psync <runID> <offset>, runID 是主节点 runID,offset 是复制偏移量。

2、主节点根据接收到的psync命令及当前服务器状态,决定执行全量复制还是部分复制:

  • 对比主、从节点的 runID 一致,且从节点发送 slave_repl_offset 之后的数据在 repl_backlog_buffer缓冲区中均存在(队列是环形的,有可能被擦除重写了),则回复 CONTINUE,代表以追加模式进行部分复制。

  • runID 与从节点发送的 runID 不同,或者从节点发送的 slave_repl_offset 之后的数据已不在主节点的 repl_backlog_buffer缓冲区中 (因为队列是环形的,所以等待时间太长或者有断连的情况,有可能被擦除重写了),则回复从节点 FULLRESYNC <runid> <offset>,表示要进行全量复制,同时记下主节点的 runID 和offset。日志如下:

repl_backlog_buffer:它是为了从库断开之后,如何找到主从差异数据而设计的环形缓冲区,从而避免全量复制带来的性能开销。如果从库断开时间太久,repl_backlog_buffer环形缓冲区被主库的写命令覆盖了,那么从库连上主库后只能乖乖地进行一次全量复制,所以repl_backlog_buffer配置尽量大一些,可以降低主从断开后全量复制的概率。而在repl_backlog_buffer中找主从差异的数据后,如何发给从库呢?这就用到了replication buffer

replication buffer:Redis和客户端通信也好,和从库通信也好,Redis都需要给分配一个 内存buffer进行数据交互,客户端是一个client,从库也是一个client,我们每个client连上Redis后,Redis都会分配一个client buffer,所有数据交互都是通过这个buffer进行的:Redis先把数据写到这个buffer中,然后再把buffer中的数据发到client socket中再通过网络发送出去,这样就完成了数据交互。所以主从在增量同步时,从库作为一个client,也会分配一个buffer,只不过这个buffer专门用来传播用户的写命令到从库,保证主从数据一致,我们通常把它叫做replication buffer

repl_backlog_size环形缓冲区写满之后,从库是会丢失掉那部分被覆盖掉的数据,还是直接进行全量复制

  • 一个从库如果和主库断连时间过长,造成它在主库repl_backlog_bufferslave_repl_offset位置上的数据已经被覆盖掉了,此时从库和主库间将进行全量复制。
  • 每个从库会记录自己的slave_repl_offset,每个从库的复制进度也不一定相同。在和主库重连进行恢复时,从库会通过psync命令把自己记录的slave_repl_offset发给主库,主库会根据从库各自的复制进度,来决定这个从库可以进行增量复制,还是全量复制。

主从架构的优势

Redis主从架构具有多个关键优势:

  • 高可用性:通过故障转移机制,Redis主从架构提供了高可用性。如果主节点出现故障,可以快速切换到一个从节点,几乎没有停机时间。

  • 读写分离:Redis主从架构允许从节点处理读操作,从而减轻了主节点的读负载,提高了整体性能。

  • 数据冗余:从节点是主节点的复制,提供了数据冗余。即使主节点出现问题,数据仍然可用。

  • 灵活性:可以根据需要扩展从节点,以处理更多的读请求,从而提高系统的扩展性。

如何搭建Redis主从架构

本地搭建可以参考:Docker Compose搭建Redis主从复制环境的实现步骤_docker_脚本之家 (jb51.net)

要搭建Redis主从架构,需要执行以下步骤:

  • 安装和配置Redis:在主节点和从节点上安装Redis,并配置它们的redis.conf文件,确保允许数据复制。

  • 启动主节点:首先启动主节点,确保其正常运行。

  • 启动从节点:启动从节点,并在配置文件中指定主节点的IP地址和端口。这个跟MySQL很类似。

replicaof <masterip> <masterport>
  • 数据同步:从节点会自动连接到主节点并请求数据复制。可以使用INFO replication命令检查复制状态。

  • 测试和监控:验证主从架构是否正常工作,监控主节点和从节点的性能和状态。

结论

Redis主从架构是一种强大的架构模式,可用于提高Redis数据库的可用性、性能和可扩展性。它通过将写操作集中在主节点上,同时允许多个从节点处理读操作,为应对高负载和故障提供了解决方案。通过了解Redis主从架构的工作原理和配置方法,可以更好地利用Redis来构建强大的应用程序和服务。

以上就是一文带你深入理解Redis的主从架构的详细内容,更多关于Redis主从架构的资料请关注脚本之家其它相关文章!

相关文章

  • Redis内存回收用法及说明

    Redis内存回收用法及说明

    Redis通过配置文件设置最大内存空间,当达到上限时,会使用过期策略和淘汰策略来管理内存,过期策略包括惰性删除和周期删除,而淘汰策略则根据内存使用情况主动删除部分key以释放空间
    2025-12-12
  • Redis事务,Redis实现悲观锁,乐观锁方式

    Redis事务,Redis实现悲观锁,乐观锁方式

    文章介绍了Redis事务的概念、特点和执行过程,区别于MySQL事务的ACID特性,详细讲解了未授权读取、授权读取、重复读取和串行化四种隔离级别,并解析了悲观锁和乐观锁的定义与应用场景,最后阐述了Redis通过版本号实现乐观锁的机制
    2026-05-05
  • Redis密码在springboot中自定义加解密实践

    Redis密码在springboot中自定义加解密实践

    文章介绍了在Spring Boot项目中自定义配置Redis密码的加解密方法,通过在`application.yml`文件中配置信息,并在`RedisConfig`类中实现加解密逻辑
    2026-01-01
  • Redis高级用法以及golang代码示例

    Redis高级用法以及golang代码示例

    Redis是一个远程内存数据库,它不仅性能强劲,而且还具有复制特性以及为解决问题而生的独一无二的数据模型,这篇文章主要介绍了Redis高级用法以及golang代码示例的相关资料,需要的朋友可以参考下
    2026-01-01
  • 基于Redis有序集合实现滑动窗口限流的步骤

    基于Redis有序集合实现滑动窗口限流的步骤

    滑动窗口算法是一种基于时间窗口的限流算法,通过动态地滑动窗口,可以动态调整限流的速率,Redis有序集合可以用来实现滑动窗口限流,本文介绍基于Redis有序集合实现滑动窗口限流,感兴趣的朋友一起看看吧
    2024-12-12
  • 基于Redis6.2.6版本部署Redis Cluster集群的问题

    基于Redis6.2.6版本部署Redis Cluster集群的问题

    这篇文章主要介绍了基于Redis6.2.6版本部署Redis Cluster集群,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • Redis字符串原理的深入理解

    Redis字符串原理的深入理解

    这篇文章主要给大家介绍了关于Redis字符串原理的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Redis具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • 深入理解redis删除策略和淘汰策略

    深入理解redis删除策略和淘汰策略

    每隔一段时间就扫描一定数据的设置了过期时间的key,并清除其中已过期的keys,本文主要介绍了深入理解redis删除策略和淘汰策略,感兴趣的可以了解一下
    2024-08-08
  • Redis异步队列的实现及应用场景

    Redis异步队列的实现及应用场景

    异步队列是一种底层基于异步 I/O 模型的消息队列,用于在分布式系统中进行同步和异步的通讯和协作,本文主要介绍了Redis异步队列的实现及应用场景,感兴趣的可以了解一下
    2023-12-12
  • Redis+Caffeine多级缓存数据一致性解决方案

    Redis+Caffeine多级缓存数据一致性解决方案

    两级缓存Redis+Caffeine可以解决缓存雪等问题也可以提高接口的性能,但是可能会出现缓存一致性问题,如果数据频繁的变更,可能会导致Redis和Caffeine数据不一致的问题,所以本文给大家介绍了Redis+Caffeine多级缓存数据一致性解决方案,需要的朋友可以参考下
    2024-12-12

最新评论