Skip to content

主从复制 ​

Redis 主从复制是实现读写分离和数据备份的基础架构。

复制原理 ​

工作流程 ​

Master (RW)                Slave (R)
    │                          │
    │──── SYNC ────────────────>│
    │                          │
    │<─── SYNC + RDB ──────────│
    │                          │
    │──── RDB Data ───────────>│
    │                          │
    │──── Command Propagation ─>│

复制步骤 ​

  1. 建立连接:Slave 连接 Master
  2. 发送 SYNC:Slave 发送同步命令
  3. BGSAVE:Master 执行后台保存
  4. 传输 RDB:Master 发送 RDB 文件
  5. 命令传播:Master 持续发送写命令

配置方式 ​

配置文件 ​

conf
replicaof 192.168.1.100 6379
masterauth your_password
replica-read-only yes

Docker Compose ​

yaml
version: '3.8'
services:
  redis-master:
    image: redis:7.2.4
    ports:
      - "6379:6379"

  redis-slave:
    image: redis:7.2.4
    ports:
      - "6380:6379"
    command: redis-server --replicaof redis-master 6379

读写分离 ​

go
// 写操作用 Master
master := redis.NewClient(&redis.Options{
    Addr: "master:6379",
})

// 读操作用 Slave  
slave := redis.NewClient(&redis.Options{
    Addr: "slave:6380",
})

master.Set(ctx, "key", "value", 0)
val, _ := slave.Get(ctx, "key").Result()

管理命令 ​

bash
# 查看复制状态
INFO replication

# 主从切换
REPLICAOF NO ONE  # 提升为 Master

最佳实践 ​

  1. 监控复制延迟
  2. 使用哨兵自动切换
  3. 关键数据读 Master

在下一章中,我们将学习哨兵和集群机制。