一。新版复制PSYNC命令实现:复制实现总流程

(1)通过客户端向从服务器发送 slaveof <master_ip> <master_port>;此为异步执行,从服务器设置好属性后向客户端返回OK时才真正执行复制
(2)建立套接字连接;(可认为从服务器变成了主服务器的客户端)
(3)从服务器发送PING命令,主服务器返回PONG命令;返回则继续执行,否则断开重连
(4)从服务器是否设置了masterauth;设置了则需进行身份验证,未设置则跳过
(5)从服务器向主服务器发送从服务器监听的端口号
(6)PSYNC命令数据同步(完整重同步或部分重同步)
(7)命令传播(保持主从服务器数据一致,收/发命令时,从/主服务器的复制偏移量增加;同时,将命令传播至复制积压缓冲区)
(8)心跳检测(默认每秒一次)

二。新版复制PSYNC命令实现:同步与命令传播

服务器中的三个重要参数:复制偏移量、复制积压缓冲区、服务器运行ID
1.主/从服务器的复制偏移量:记录收/发字节数(主发送多少则偏移量增加多少,从接收多少则偏移量增加多少);用于判断主从服务器数据是否一致(通过偏移量是否相同)。
2.主服务器的复制积压缓冲区:固定长度FIFO队列,默认1M,存储最近的一部分命令;用于部分重同步。
(首先,命令传播时不仅将命令发送给从服务器还会将命令发送到复制积压缓冲区;其次,断线后重复制时先判断是否能够进行部分重同步即判断复制偏移量offset之后的数据是否还在复制积压缓冲区中;最后,如果存在则返回+CONTINUE回复,将复制积压缓冲区在偏移量之后的数据发送给从服务器,完成部分重同步;不存在,则返回+FULLRESYNC <runid> <offset>并执行完整重同步)
3.服务器运行ID:记录主从服务器运行ID;用于部分重同步。
(首先,初次复制时主服务器将自己的运行ID发送给从服务器,从服务器保存该ID;其次,断线重连后从服务器通过运行ID判断重连的是否为上次的主服务器(是否发送PSYNC <runid> <offset>,发送则为初次复制);最后,如果不相同则直接执行完整重同步,相同则尝试通过复制偏移量和复制积压缓冲区的比对来执行部分重同步)

Redis复制流程:图解的更多相关文章

  1. Redis复制与可扩展集群搭建

    抄自:http://www.infoq.com/cn/articles/tq-redis-copy-build-scalable-cluster 讨论了Redis的常用数据类型与存储机制,本文会讨论一 ...

  2. (转)Redis复制与可扩展集群搭建

    讨论了Redis的常用数据类型与存储机制,本文会讨论一下Redis的复制功能以及Redis复制机制本身的优缺点以及集群搭建问题. Redis复制流程概述 Redis的复制功能是完全建立在之前我们讨论过 ...

  3. Redis复制与可扩展集群搭建【转】

    本文会讨论一下Redis的复制功能以及Redis复制机制本身的优缺点以及集群搭建问题. Redis复制流程概述 Redis的复制功能是完全建立在之前我们讨论过的基于内存快照的持久化策略基础上的,也就是 ...

  4. python相关软件安装流程图解——虚拟机操作——复制虚拟机主机——CentOS-7-x86_64-DVD-1810

    请先确保已经安装了虚拟机 python相关软件安装流程图解——虚拟机安装——CentOS-7-x86_64-DVD-1810——CentOS-01下载 https://www.cnblogs.com/ ...

  5. redis系列--主从复制以及redis复制演进

    一.前言 在之前的文章已经详细介绍了redis入门基础已经持久化相关内容包括redis4.0所提供的混合持久化. 通过持久化功能,Redis保证了即使在服务器宕机情况下数据的丢失非常少.但是如果这台服 ...

  6. 深入理解redis复制原理

    原文:深入理解redis复制原理 1.复制过程 2.数据间的同步 3.全量复制 4.部分复制 5.心跳 6.异步复制 1.复制过程 从节点执行 slaveof 命令. 从节点只是保存了 slaveof ...

  7. 一文搞定 Redis 复制(全会的举个手看看)

    阅读本文大概需要 5 分钟. 本文大纲 复制过程 数据间的同步 全量复制 部分复制 心跳 异步复制 总结 一.复制过程 Step 1:从节点执行 slaveof 命令. Step 2:从节点只是保存了 ...

  8. Redis复制实现原理

    摘要 我的前一篇文章<Redis 复制原理及特性>已经介绍了Redis复制相关特性,这篇文章主要在理解Redis复制相关源码的基础之上介绍Redis复制的实现原理. Redis复制实现原理 ...

  9. 深度探索-Redis复制

    1.前言 本文介绍了Redis复制的主要流程和设计思想.通过本文的阅读,您大致能理解复制在软件架构方面的通用思想.在阅读本文之前,希望读者首先对Redis有一定的认识,对Redis的事件类型.和事件处 ...

随机推荐

  1. JS trim函数

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  2. delphi2009(10,xe)下indy10发送utf8字符串

    最近实现一个功能,使用delphi2009以TCP调用Java端的接口,接口要求先发送字符串的长度,然后再发送字符串内容,并且字符串要求是utf8格式的 调试了好长时间,才终于发现解决办法,或者说发现 ...

  3. TidHttpServer 使用示例

    unit Main; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ...

  4. Qt浮动按钮的实现(使用窗口背景透明、实现只显示浮动按钮的目的)

    Qt浮动按钮的实现 效果如下: 图3 估计很多做Qt有一定经验的朋友会觉得这个效果不难,但是这是一个需求奇葩的实际业务中做出的效果.笔者会想讲下客户的需求和整体框架的矛盾. 整个项目主要是由Qt搭建的 ...

  5. DELPHI编写服务程序总结(在系统服务和桌面程序之间共享内存,在服务中使用COM组件)

    DELPHI编写服务程序总结 一.服务程序和桌面程序的区别 Windows 2000/XP/2003等支持一种叫做“系统服务程序”的进程,系统服务和桌面程序的区别是:系统服务不用登陆系统即可运行:系统 ...

  6. System.Exception: ORA-12541: TNS: 无监听程序

    今天在一个服务器上发布一个web服务(数据库也装在这台机器上):开发工具 Visual Studio 2008 Oracle但是部署好,浏览的时候报错了:System.Web.Services.Pro ...

  7. 数据库连接池之_c3p0

    C3p0 1,手动设置参数 @Test public void demo1(){ Connection connection =null; PreparedStatement preparedStat ...

  8. C#整数类型

    C#支持9种整数类型,sbyte,byte,short,ushort,int,uint,long,ulong和char. 类型 含义                                  ...

  9. QT 那些事

    一直做的是windows开发,有2个小项目想做到手机.看来看去,选择了QT.本文介绍自己的学习的一些心得,希望对你有帮助.1.选择QT2.安卓的一些事3.QML调用C++4.资源集成(比较有用,网上资 ...

  10. CentOS7 无法使用yum命令,无法更新解决方法

    前言 设置网卡开机自动启动 设置国内dns服务器系统 修改CentOS-Base.repo中的地址 所参考的文章地址 前言 刚安装完的CentOS7的系统,发现无法使用yum命令进行更新,在更新的时候 ...