一。新版复制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. WPF x:Array的使用

    <Window x:Class="XamlTest.Window1"        xmlns="http://schemas.microsoft.com/winf ...

  2. WPF IDataErrorInfo使用-数据对象上验证

    <Window x:Class="DataBindingExam.MainWindow"        xmlns="http://schemas.microsof ...

  3. Win8 Metro(C#)数字图像处理--2.49Zhang二值图像细化算法

    原文:Win8 Metro(C#)数字图像处理--2.49Zhang二值图像细化算法  [函数名称]   二值图像细化算法      WriteableBitmap ThinningProcess ...

  4. Win8Metro(C#)数字图像处理--2.32图像曝光算法

    原文:Win8Metro(C#)数字图像处理--2.32图像曝光算法  [函数名称] 图像曝光函数ExposureProcess(WriteableBitmap src,int exposureV ...

  5. C#图片保存与读取,以及图片另存

    照片的保存与读取 /// <summary> /// 图片转二进制 /// </summary> /// <param name="imgPhoto" ...

  6. <%@ Application Codebehind="Global.asax.cs" Inherits="XXX.MvcApplication" Language="C#" %>

    <%@ Application Codebehind="Global.asax.cs" Inherits="XXX.MvcApplication" Lan ...

  7. c# winform快捷键实现

    我们在软件中经常用到快捷键,这里整理备份一下. 首先我们要定义可以作为快捷键的按键,以下是整理的 一些,自己可以根据情况来修改 public static Dictionary<int, str ...

  8. VC++的Unicode编程

    本文来自:http://tech.ddvip.com/2007-03/117395585321221.html 一.什么是Unicode 先从ASCII说起,ASCII是用来表示英文字符的一种编码规范 ...

  9. 『 效率工具 』Spring Boot版的轻量级代码生成器,减少70%以上的开发任务

    一. 前言 之前很着迷于代码自动生成,减少写重复代码的工作量.网络上也搜索了很久,有基于插件的,有GUI的.但其配置和学习成本都比较高,都不是很如我意. 本想自己用SpringBoot写一个,在收集相 ...

  10. Web前端——JavaScript练习

    Js练习 显示和隐藏,改变display属性(点击查看图片) 关键代码: e.style.display = "block"; e.style.display = "no ...