最近研究了一下Redis 5.0主从复制部分的代码,其同步协议的握手流程比较繁琐,兼容了不同版本协议的差异,支持了增量同步数据。 当从启动后,会直接连接主节点,首先使用PSYNC命令尝试增量同步,如果主返回不支持、或者元数据与主衔接不上,则跳转全量同步。 顺便在写一些细节: 当KEY有TTL时,从节点不执行KEY过期的逻辑,当主上对应的KEY过期后,主节点会同步给从节点一条对应的DEL命令,用以删除从节点上对应的KEY。 整个握手流程与状态迁移: 参考 官方文档介绍