Redis同步(主从复制)

本文详细解释了Redis主从复制的工作原理,并提供了如何配置Redis主从复制的步骤,包括启动两个Redis服务器、配置Slave成为Master的副本以及应用示例。重点突出主从复制在数据同步和高可用性方面的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录
1、Replication的工作原理
2、如何配置Redis主从复制
3、应用示例

1、Replication的工作原理
在Slave启动并连接到Master之后,它将主动发送一条SYNC命令。此后Master将启动后台存盘进程,同时收集所有接收到的用于修改数据集的命令,在后台进程执行完毕后,Master将传送整个数据库文件到Slave,以完成一次完全同步。而Slave服务器在接收到数据库文件数据之后将其存盘并加载到内存中。此后,Master继续将所有已经收集到的修改命令,和新的修改命令依次传送给Slaves,Slave将在本次执行这些数据修改命令,从而达到最终的数据同步。

如果Master和Slave之间的链接出现断连现象,Slave可以自动重连Master,但是在连接成功之后,一次完全同步将被自动执行。

2、如何配置Redis主从复制
1、同时启动两个Redis服务器,可以考虑在同一台机器上启动两个Redis服务器,分别监听不同的端口,如6379(master)和6380(slave)。
2、在Slave服务器上执行一下命令:

d:\dev\redis-2.4.5-win64>redis-cli.exe -h 127.0.0.1 -p 6380 #这里我们假设Slave的端口号是6380
redis 127.0.0.1:6380> slaveof 127.0.0.1 6379 #假设Master和Slave在同一台主机,Master的端口为6379
OK
redis 127.0.0.1:6380>

上面的方式只是保证了在执行slaveof命令之后,redis-6380成为了redis-6379的slave,一旦服务(redis-6380)重新启动之后,他们之间的复制关系将终止。
如果希望长期保证这两个服务器之间的Replication(主从复制)关系,可以在redis-6380的配置文件中做如下修改:
将# slaveof <masterip> <masterport>改为slaveof 127.0.0.1 6379,保存退出。
这样就可以保证Redis-6380服务程序在每次启动后都会主动建立与Redis-6379的Replication连接了。

3、应用示例
这里我们假设Master-Slave已经建立。

复制代码
#启动master服务器,即启动6379端口redis服务器,操作如下:
C:\Users\lenovo>cd D:\dev\redis-2.4.5-win64
C:\Users\lenovo>d:
D:\dev\redis-2.4.5-win64>redis-server.exe redis.conf

#启动slave服务器,即启动6380端口redis服务器,操作如下:
C:\Users\lenovo>cd D:\dev\redis-2.4.5-win64
C:\Users\lenovo>d:
D:\dev\redis-2.4.5-win64>redis-server.exe redis6380.conf

#启动master客户器,操作如下:
C:\Users\lenovo>cd D:\dev\redis-2.4.5-win64
C:\Users\lenovo>d:
D:\dev\redis-2.4.5-win64>redis-cli.exe -h 127.0.0.1 -p 6379
redis 127.0.0.1:6379>

#启动master客户器,操作如下:
C:\Users\lenovo>cd D:\dev\redis-2.4.5-win64
C:\Users\lenovo>d:
D:\dev\redis-2.4.5-win64>redis-cli.exe -h 127.0.0.1 -p 6380
redis 127.0.0.1:6379>

#清空Master当前数据库中的所有Keys。
redis 127.0.0.1:6379> flushdb
OK
redis 127.0.0.1:6379>

#清空Master当前数据库中的所有Keys。
redis 127.0.0.1:6380> flushdb
OK
redis 127.0.0.1:6380>

#在Master中创建新的Keys作为测试数据。
redis 127.0.0.1:6379> set mykey hello
OK
redis 127.0.0.1:6379> set mykey2 world
OK
#查看Master中存在哪些Keys。
redis 127.0.0.1:6379> keys *
1) "mykey"
2) "mykey2"

#在Slave中查看所有的key。
redis 127.0.0.1:6380> keys *
1) "mykey"
2) "mykey2"

#在Master中删除其中一个测试Key,并查看删除后的结果。
redis 127.0.0.1:6379> del mykey2
(integer) 1
redis 127.0.0.1:6379> keys *
1) "mykey"

#在Slave中查看是否mykey2也已经在Slave中被删除。
redis 127.0.0.1:6380> keys *
1) "mykey"
复制代码

注意:
a、如果在Slave中删除mykey,不能同时删除Master中的mykey。
b、Slave启动顺利跟Master启动无关联。

<think>首先,用户的问题是关于Redis主从复制的工作原理和配置方法。我需要根据系统级指令来构建我的回答。 关键指令: - 所有行内数学表达式使用 `$...$` 格式,但Redis主题不涉及数学表达式,所以这部分可能不需要。 - 独立公式使用 `$$...$$` 并单独成段,同样不适用。 - LaTeX语法正确:确保任何数学格式正确,但这里可能没有。 - 使用中文回答:整个回答必须用中文。 - 生成相关问题:在回答后添加相关问题。 - 回答中引用的段落末尾自然地添加引用标识,如 `[^1]`:我需要参考提供的引用内容。 提供的引用内容: - [^1]: 配置Redis主从复制,描述主从复制的基本概念。 - [^2]: 主从复制的策略:全量同步和增量同步。 - [^3]: 主从复制启用的三种方式。 - [^4]: 配置步骤,包括临时和永久配置。 - [^5]: 部分重同步的原理,包括runid、offset和backlog buffer。 用户的问题:我想了解Redis主从复制的工作原理和配置方法。 回答结构: - 结构清晰,帮助用户逐步解决问题。 - 保证回答真实可靠,基于提供的引用。 - 最后添加相关问题。 大纲回答: 1. **介绍Redis主从复制**:简要说明什么是主从复制及其目的。 2. **工作原理**: - 初始同步(全量复制)。 - 增量复制。 - 部分重同步机制(如引用[5]所述)。 3. **配置方法**: - 临时配置(通过命令)。 - 永久配置(通过配置文件)。 4. **引用添加**:在相关段落末尾添加引用标识。 5. **相关问题**:生成3-5个相关问题。 确保回答用中文。 相关问题示例(基于用户查询): 1. Redis主从复制有什么优点和缺点? 2. 如何优化Redis主从复制的性能? 3. Redis主从复制在故障转移中如何应用? 4. 主从复制中的数据一致性问题如何解决? 5. Redis集群主从复制的区别是什么? 现在,构建回答内容。</think>### Redis主从复制原理及配置步骤 Redis主从复制是一种常见的数据复制机制,用于实现数据冗余和负载均衡。主节点(Master)负责处理写操作,从节点(Slave)负责复制主节点的数据并处理读操作。下面我将逐步解释其工作原理和配置方法,确保内容清晰可靠。 #### 一、Redis主从复制的工作原理 Redis主从复制基于两种同步策略:全量同步和增量同步。当从节点首次连接主节点时,会触发全量同步;之后,则使用增量同步来保持数据一致。如果网络中断后重新连接,Redis支持部分重同步机制来高效恢复数据同步[^2]。 1. **全量同步(初始同步)**: - 当从节点启动或首次连接到主节点时,主节点会执行一次全量数据复制。 - 过程:主节点生成当前数据集的快照(RDB文件),发送给从节点。从节点加载快照后,主节点再将期间累积的写命令发送给从节点执行,确保数据完全一致[^2][^5]。 - 特点:适用于初始化场景,但数据量大时可能阻塞服务。 2. **增量同步(持续同步)**: - 全量同步完成后,主节点会将所有写操作记录在内存缓冲区中。 - 主节点实时将这些写命令发送给从节点执行,实现数据增量更新[^2]。 - 优点:高效、低延迟,适合日常数据同步。 3. **部分重同步机制(断线恢复)**: - 当网络中断后重新连接时,Redis使用部分重同步避免全量复制开销。 - 关键组件: - **runid(replication ID)**:主节点启动时生成的唯一40位字符串标识,用于识别主节点[^5]。 - **offset(复制偏移量)**:主从节点各自维护一个偏移量,记录已传输的字节数。比较偏移量可判断数据差异[^5]。 - **replication backlog buffer(复制积压缓冲区)**:一个固定大小的FIFO队列(默认1MB),由主节点维护,备份最近发送的写命令。从节点断线后,可从缓冲区中拉取缺失数据[^5]。 - 流程:从节点发送runid和offset给主节点;主节点检查offset是否在缓冲区范围内,如果是,则发送增量数据;否则,回退到全量同步[^5]。 Redis主从复制通过这种策略确保数据最终一致性,但写操作仅由主节点处理,从节点提供只读服务[^1][^3]。 #### 二、Redis主从复制的配置步骤 配置主从复制支持临时和永久两种方式。以下以一台机器上配置两个Redis实例为例(主节点端口6379,从节点端口6380),操作简单可靠。 1. **临时配置(通过客户端命令)**: - 启动主节点和从节点服务: ```bash # 启动主节点(端口6379) redis-server --port 6379 # 启动从节点(端口6380) redis-server --port 6380 ``` - 在从节点上执行复制命令: ```bash redis-cli -p 6380 # 连接到从节点 127.0.0.1:6380> SLAVEOF 127.0.0.1 6379 # 设置主节点IP和端口 OK ``` - 此方式在从节点重启后复制关系会终止,仅适用于测试[^3][^4]。 2. **永久配置(通过配置文件)**: - 编辑从节点的配置文件(如`6380.conf`): ```bash cd /etc/redis # 进入配置文件目录 vi 6380.conf # 编辑从节点配置文件 ``` - 修改配置项: ```ini # 取消注释并设置主节点信息 slaveof 127.0.0.1 6379 ``` - 保存并重启从节点服务: ```bash redis-server /etc/redis/6380.conf --daemonize yes # 后台启动 ``` - 此方式确保从节点每次启动时自动连接主节点,适合生产环境[^4]。 - 验证配置:连接主节点执行`INFO replication`,查看`connected_slaves`字段是否显示从节点信息[^3]。 配置完成后,主节点写入数据会通过Redis Sync机制自动同步到从节点,实现数据冗余和高可用[^1][^4]。如果遇到网络问题,部分重同步机制能快速恢复数据一致性[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值