【Redis】Redis 的主从同步

Redis 主从同步(Master-Slave Replication)是一种数据复制机制,用于将数据从一个主节点(Master)同步到一个或多个从节点(Slave)。这种机制可以提高数据的可用性和读取性能。

主从同步的基本原理

  1. 主节点(Master):负责处理写请求和一部分读请求,保存数据的最新状态。
  2. 从节点(Slave):复制主节点的数据,处理只读请求,分担主节点的读取压力。

同步过程

  1. 初次同步

    • 当从节点第一次连接到主节点时,会发送一个 SYNC 命令。
    • 主节点接收到 SYNC 命令后,会执行 BGSAVE 命令生成一个快照(RDB 文件),并将快照发送给从节点。
    • 同时,主节点会将从生成快照以来的写操作记录到积压缓冲区(Replication Backlog)。
    • 从节点接收到快照后,清空现有数据并加载快照,然后再从积压缓冲区中接收和应用增量数据。
  2. 增量同步

    • 初次同步完成后,主节点会将每次写操作(如 SET、DEL 等)发送给从节点,从节点按顺序应用这些操作。
  3. 断线重连

    • 如果从节点与主节点的连接断开,当连接重新建立时,从节点会发送 PSYNC 命令。
    • 如果从节点的偏移量还在主节点的积压缓冲区范围内,主节点只需将缓冲区中的增量数据发送给从节点。
    • 否则,从节点需要重新进行一次完整的初次同步。

主从同步的优势

  • 读写分离:将读请求分散到多个从节点,减少主节点的负载,提高系统的读取性能。
  • 高可用性:主节点故障时,可以将一个从节点提升为新的主节点,保证数据的高可用性。

主从同步的配置

redis.conf 文件中进行配置:

# 在从节点的配置文件中添加如下配置,指定主节点的地址和端口
slaveof <master-ip> <master-port>

# 如果主节点设置了密码保护,还需添加主节点的密码
masterauth <master-password>

或者在运行时通过命令行配置:

# 在从节点上执行
redis-cli SLAVEOF <master-ip> <master-port>

# 如果主节点设置了密码保护,还需配置主节点的密码
redis-cli CONFIG SET masterauth <master-password>

Java 代码示例

使用 Jedis 库进行 Redis 的主从同步操作:

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class RedisReplicationExample {
    public static void main(String[] args) {
        // 主节点信息
        String masterHost = "master-host";
        int masterPort = 6379;

        // 从节点信息
        String slaveHost = "slave-host";
        int slavePort = 6379;

        // 连接主节点
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        JedisPool masterPool = new JedisPool(poolConfig, masterHost, masterPort);
        Jedis masterJedis = masterPool.getResource();

        // 连接从节点
        JedisPool slavePool = new JedisPool(poolConfig, slaveHost, slavePort);
        Jedis slaveJedis = slavePool.getResource();

        // 配置从节点同步主节点
        slaveJedis.slaveof(masterHost, masterPort);

        // 示例操作
        masterJedis.set("key", "value");
        String value = slaveJedis.get("key");
        System.out.println("The value of 'key' is: " + value);

        // 关闭连接
        masterJedis.close();
        masterPool.close();
        slaveJedis.close();
        slavePool.close();
    }
}

以上代码实现了通过 Jedis 库配置 Redis 的主从同步,并进行简单的数据操作。

  • 12
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值