一。新版复制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. 搜索服务器Elasticsearch

    基本 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Ap ...

  2. 从PRISM开始学WPF(七)MVVM(三)事件聚合器EventAggregator?

    原文:从PRISM开始学WPF(七)MVVM(三)事件聚合器EventAggregator? 从PRISM开始学WPF(一)WPF? 从PRISM开始学WPF(二)Prism? 从PRISM开始学WP ...

  3. 启动组织重整 Marvell追求创新文化

    最近接任Marvell技术长的Neil Kim正是该公司亟需的人才——他在今年四月加入后,预计将为Marvell带来正面.积极的改革契机,有机会让该公司彻底改头换面... 迈威尔科技(Marvell) ...

  4. PE格式大图

  5. Android动画基础——属性动画(Property Animation)

    本篇涉及例子下载:Github 本篇讲android 3.0引入的属性动画框架,上篇写视图动画View Animation时就说过ViewAnimation的缺点,那就是动画作用的是view本身的视觉 ...

  6. 让您的应用兼容 Android Oreo

    不知不觉Android Oreo已经发布几个月时间了,你的应用开始使用最新平台了吗?在应用迁移过程中是否遇到了一些棘手问题?你的Android应用兼容Oreo如何呢? 我们应该都知道,每一次重大升级, ...

  7. C# mysql set和enum属性字段的读取和添加

    1.使用Navicat for Mysql设置set和enum属性字段: a.enum类型 b.set类型 enum类型在创建表时需要设置初始值,在如图所示的位置设置. 2.C#读取和添加数据 a.e ...

  8. 使用 GNU autotools 改造一个软件项目

    使用 GNU autotools 改造一个软件项目 及永刚 jungle@soforge.com 2006 年 3 月 24 日  版本:0.3 本文不是一篇规范的教程,而是用一个软件项目作为例子,演 ...

  9. 转载 《TypeScript 类型定义 DefinitelyTyped》

    快速使用Romanysoft LAB的技术实现 HTML 开发Mac OS App,并销售到苹果应用商店中.   <HTML开发Mac OS App 视频教程> 土豆网同步更新:http: ...

  10. 使用SpringMVC框架解决中文乱码的问题

    spring Web MVC框架提供了org.springframework.web.filter.CharacterEncodingFilter用于解决POST方式造成的中文乱码 问题. 需要在we ...