Redis 实现主从同步

Redis 主从同步(Replication)是指将一台 Redis 服务器(主节点)的数据复制到其他 Redis 服务器(从节点)的过程。

以下是 Redis 主从同步的实现原理和配置方式。


一、主从同步工作原理

1. 全量同步(初始同步)

当从节点第一次连接主节点,或从节点与主节点断开连接时间过久时,会触发全量同步:

  1. 从节点发送 PSYNC ? -1 命令请求全量同步。

  2. 主节点执行 BGSAVE 生成 RDB 文件,同时缓存新写入的命令。

  3. 主节点将 RDB 文件发送给从节点,从节点清空旧数据并加载 RDB。

  4. 主节点将缓存的写命令(Replication Buffer)发送给从节点执行。

2. 增量同步(断线重连)

当从节点短线重连后,如果条件允许,会进行增量同步:

  1. 从节点保存了主节点的 runID 和复制偏移量 offset。

  2. 从节点发送 PSYNC <runID> <offset> 命令。

  3. 主节点判断 offset 是否在复制积压缓冲区(Repl Backlog Buffer)中:

    • 如果在,则发送缓冲区中从 offset 到最新的写命令。

    • 如果不在,则触发全量同步。


二、配置主从同步

1. 临时配置(重启失效)

在从节点上执行命令:

bash 复制代码
# 设置主节点地址和端口
SLAVEOF <master-ip> <master-port>

# 取消复制,恢复为主节点
SLAVEOF NO ONE

2. 永久配置

修改从节点的 redis.conf:

bash 复制代码
# 指定主节点
replicaof <master-ip> <master-port>

# 如果主节点有密码,需配置
masterauth <master-password>

# 从节点只读(默认)
replica-read-only yes

三、关键配置参数

参数 说明
repl-backlog-size 复制积压缓冲区大小(影响断线重连能否增量同步)
repl-timeout 复制超时时间(默认 60 秒)
min-replicas-to-write 主节点至少写入的从节点数量
replica-serve-stale-data 从节点与主节点失联时是否响应旧数据

四、主从同步流程示例

bash 复制代码
# 1. 启动主节点(默认端口 6379)
redis-server

# 2. 启动从节点并连接主节点
redis-server --port 6380 --replicaof 127.0.0.1 6379

# 3. 查看主从状态
redis-cli -p 6379 info replication  # 主节点
redis-cli -p 6380 info replication  # 从节点

五、常见问题与优化

1. 主从数据不一致

  • 原因:网络延迟、从节点负载过高。

  • 解决 :监控 master_repl_offset 和 slave_repl_offset 差值。

2. 全量同步频繁

  • 原因:复制积压缓冲区大小不足或从节点频繁重启。

  • 解决 :增大 repl-backlog-size,避免频繁重启。

3. 主节点内存溢出

  • 原因 :BGSAVE 生成 RDB 时内存翻倍。

  • 解决:主节点内存预留一半,或使用磁盘缓冲。


六、相关命令

bash 复制代码
# 查看复制信息
INFO replication

# 手动触发全量同步(从节点)
REPLICAOF <master-ip> <master-port>

# 提升从节点为主节点(故障转移时)
REPLICAOF NO ONE

通过以上配置和原理,Redis 主从同步可以实现数据的高可用备份和读写分离(从节点处理读请求)。

相关推荐
SL_staff24 分钟前
规则联动:给工厂装上‘自动化神经反射弧’——JVS·物联网平台规则引擎实战教程
java·人工智能·物联网
骑着蜗牛撵大象32731 分钟前
Linux 进程间通信之管道:从 pipe() 的内核语义到 FIFO 落地排错
android·java·linux·系统编程·fifo·管道·进程间通信
WJ.Polar1 小时前
Java封装、继承、多态
java·开发语言
ly76891 小时前
PostgreSQL 备份恢复策略:pg_basebackup、WAL 归档与 PITR 在企业 Java 系统中的落地
java·数据库·postgresql·pitr·pg_basebackup·wal 归档
摇滚侠1 小时前
Java 中如何表示负数,有符号和无符号的区别,补码的计算规则,char byte short int long 的范围
java·开发语言
奇牙coding1 小时前
Codex CLI 升级后多文件编辑静默失效:config.yaml 枚举变更排查与修复指南
java·前端·javascript·ai
小羊没烦恼!2 小时前
Ajax与JSON的一些总结
android·java·前端·数据库·mysql·算法·okhttp
Lhappy嘻嘻2 小时前
读懂 JVM:内存模型、类加载机制、分代回收
java·开发语言·jvm
黄俊懿2 小时前
【架构师从入门到进阶】第六章:服务集群优化——第八节:线程数公式
java·服务器·数据库·分布式·性能优化·架构·系统架构
Rain的Java大神之路2 小时前
别再死磕 MySQL 了:向量数据库与 RAG 生产落地实录(Java 工程师专场)
java·后端·面试