数据库-Redis(13)

本文详细介绍了Redis的复制过程,包括全量复制的三个阶段:连接协商、数据同步、后续命令传播。此外,还讨论了增量复制的必要性和流程,以及在网络断开后如何处理repl_backlog_size环形缓冲区的情况。最后,提到了无持久化主服务自动重启的风险。
摘要由CSDN通过智能技术生成

目录

61.Redis全量复制的三个阶段?

62.Redis为什么会涉及增量复制?

63、Redis增量复制的流程?

64.增量复制如果在网络断开期间,repl_backlog_size环形缓冲区写满以后,从库是会丢失掉那部分被覆盖的数据,还是直接进行全量复制呢?

65.Redis为什么不持久化的主服务自动重启非常危险呢?


61.Redis全量复制的三个阶段?

第一阶段是主从库间建立连接,协商同步的过程,主要是为全量复制做准备。在这一步,从库和主库建立起链接,并告诉主库即将进行同步,主库确认回复后,主从库间就可以开始同步了。

具体来说,从库给主库发送psync命令,表示要进行数据同步,主库根据这个命令的参数来启动复制。psync命令包含了主库的runId和复制进度offset两个参数。runId,是每一个Redis实例启动时都会自动生成的一个随机ID,用来唯一标记这个实例。当从库和主库第一次复制时,因为不知道主库的runId,所以将runId设置为“?”。

offset,此时设为-1,表示第一次复制。主库收到psync命令后,会用fullresync相应命令带上两个参数:主库runid和主库目前的复制进度offset,返回给从库。从库收到相应后,会记录下这两个参数。这里有个地方需要注意,FULLRESYC响应表示第一次复制采用的全量复制,也就是说,主库会把当前所有的数据都复制给从库。

第二阶段,主库将所有数据同步给从库。从库收到数据后,在本地完成数据加载。这个过程依赖于内存快照生辰的RDB文件。

具体来说,主库执行bgsave命令,生成RDB文件,接着将文件发送给从库。从库接收到RDB文件后,会先清空当前数据库,然后加载RDB文件。这是因为从库在通过replicaAOF命令开始个主库同步前,可能保存了其他数据。为了避免之前数据的影响,从库需要先把当前数据库清空。在主库将数据同步给从库的过程中,主库不会被阻塞,仍然可以正常接收请求。否则,Redis的服务就被中断了。但是,这些请求中的写操作并没有记录到刚刚生成的RDB文件中。为了保证主从库的数据一致性,主库会在内存中用专门的replication  buffer,记录RDB文件生成后收到的所有写操作。

第三个阶段,主库会把第二阶段执行过程中新收到的写命令,再发送给从库。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值