0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

PSYNC命令的实现调用方法

麦辣鸡腿堡 来源:七哥聊编程 作者:七哥聊编程 2023-10-09 15:22 次阅读

PSYNC命令的调用方法有两种:

如果从服务器以前没有复制过任何主服务器,或者之前执行过 SLAVEOF no one 命令,那么从服务器在开始一次新的复制时将向主服务器发送PSYNC ? -1 命令,主动请求主服务器进行完整重同步(因为这时不可能执行部分重同步);

相反地,如果从服务器已经复制过某个主服务器,那么从服务器在开始一次新的复制时将向主服务器发送 PSYNC 《runid》 《offset》 命令:其中runid 是上一次复制的主服务器的运行ID,而 offset则是从服务器当前的复制偏移量,接收到这个命令的主服务器会通过这两个参数来判断应该对从服务器执行哪种同步操作。

根据情况,接收到PSYNC命令的主服务器会向从服务器返回以下三种回复的其中一种:

如果主服务器返回 +FULLRESYNC 《runid》 《offset》回复,那么表示主服务器将与从服务器执行完整重同步操作:其中runid是这个主服务器的运行ID,从服务器会将这个ID保存起来,在下一次发送PSYNC命令时使用;而offset则是主服务器当前的复制偏移量,从服务器会将这个值作为自己的初始化偏移量;

如果主服务器返回 +CONTINUE回复,那么表示主服务器将与从服务器执行部分重同步操作,从服务器只要等着主服务器将自己缺少的那部分数据发送过来就可以了;

如果主服务器返回 -ERR 回复,那么表示主服务器的版本低于 Redis
2.8,它识别不了PSYNC命令,从服务器将向主服务器发送SYNC命令,并与主服务器执行完整同步操作。

图片

这张图看了理解起来保准没啥难度了!

上面我们详细说明了redis主从同步时,底层是如何决定使用全量同步或者部分同步的策略。下面看下整个增量同步和部分同步的过程:

Redis 的全量同步过程主要分三个阶段:

同步快照阶段: Master 创建并发送快照给 Slave , Slave 载入并解析快照。Master
同时将此阶段所产生的新的写命令存储到缓冲区。

同步写缓冲阶段:Master 向 Slave 同步存储在缓冲区的写操作命令。

同步增量阶段:Master 向 Slave 同步写操作命令。

图片

增量同步

Redis 增量同步主要指 Slave 完成初始化后开始正常工作时, Master 发生的写操作同步到 Slave 的过程。

通常情况下, Master 每执行一个写命令就会向 Slave 发送相同的写命令,然后 Slave 接收并执行。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 服务器
    +关注

    关注

    12

    文章

    9136

    浏览量

    85351
  • 数据库
    +关注

    关注

    7

    文章

    3796

    浏览量

    64367
  • 同步
    +关注

    关注

    0

    文章

    89

    浏览量

    19170
  • Redis
    +关注

    关注

    0

    文章

    374

    浏览量

    10871
收藏 人收藏

    评论

    相关推荐

    labview调用DOS命令实现下面图片的登录方式(用户:域名\用户,密码:密码)

    labview调用DOS命令实现下面图片的登录方式(用户:域名\用户,密码:密码)?labview调用DOS命令
    发表于 07-27 19:52

    如何从VEE调用TCL命令

    嗨,有没有人能够找到一种如何从VEE调用TCL命令方法?是否有可以加载到VEE的.NET程序集TCL库?谢谢。 以上来自于谷歌翻译 以下为原文Hi,was anybody able
    发表于 04-02 16:57

    通过CALL命令调用cmd脚本实现NVM读取

    和具体使用方法1.4 save命令详解2. 通过CALL命令调用cmd脚本实现NVM读取2.1 CMD
    发表于 11-04 07:52

    单片机实现AT调试命令方法

    用户参数到接收缓冲区,定义0x0d作为结束标志2、调用命令类型解析回调函数AT_DeviceHandle,对命令消息进行分流,然后进入指令类型解析函数3、再指令解析函数里面对指令进行分流,分别处理对应的指令以及使用相关参数关键实现
    发表于 01-06 06:15

    matlab自定义函数调用方法

    matlab自定义函数调用方法 命令文件/函数文件+ 函数文件 - 多
    发表于 11-29 13:14 88次下载

    虚拟仪器调用MessageBox函数的实现

    虚拟仪器软件设计中以图形化语言LABVIEW为主,但在遇到LABVIEW不易实现的功能时,可通过在LABVIEW中调用其他函数来实现。本文介绍了在LABVIEW中调用Win32 API
    发表于 09-14 15:07 23次下载

    根据TR600芯片的过程调用设计与硬件实现

    根据TR600芯片的过程调用设计与硬件实现 摘 要:介绍了TR600语音编解码芯片中过程调用的设计及实现方法,并与堆栈寄存器结构
    发表于 04-21 16:19 1197次阅读
    根据TR600芯片的过程<b class='flag-5'>调用</b>设计与硬件<b class='flag-5'>实现</b>

    调用DLL实现LabVIEW数据采集

    介绍了在LabVIEW 中调用外部程序代码的方法。详细探讨了DLL 文件的调用方法,并通过实例介绍了基于非NI 公司的数据采集卡的数据采集的实现
    发表于 03-26 15:30 154次下载
    <b class='flag-5'>调用</b>DLL<b class='flag-5'>实现</b>LabVIEW数据采集

    vb调用excel方法大全

    电子发烧友网站提供《vb调用excel方法大全.docx》资料免费下载
    发表于 04-14 10:27 6次下载

    透了解系统调用助你成为Linux下编程高手

    Linux内核中设置了一组用于实现各种系统功能的子程序,称为系统调用。用户可以通过系统调用命令在自己的应用程序中调用它们。
    的头像 发表于 05-11 11:27 3426次阅读
    透了解系统<b class='flag-5'>调用</b>助你成为Linux下编程高手

    C调用matlab方法

    C调用matlab方法介绍
    发表于 07-31 10:55 0次下载

    super调用父类的构造方法

    我们分析这句话“父类对象的引用”,那说明我们使用的时候只能在子类中使用,既然是对象的引用,那么我们也可以用来调用成员属性以及成员方法,当然了,这里的 super 关键字还能够调用父类的构造方法
    的头像 发表于 10-10 16:42 905次阅读
    super<b class='flag-5'>调用</b>父类的构造<b class='flag-5'>方法</b>

    LabVIEW命令调用exe传入的参数如何获取

    有些场景下,我们用LabVIEW开发的应用程序,需要通过命令行来调用,并向该应用程序传递参数,那么在程序中如何才能获取这些参数呢?
    发表于 10-11 09:28 2467次阅读
    LabVIEW<b class='flag-5'>命令</b>行<b class='flag-5'>调用</b>exe传入的参数如何获取

    shell并行调用脚本

    在Shell脚本中,可以使用一些技巧来实现并行调用。以下是几种常见的方法: 使用后台进程:在Shell脚本中,可以使用"command2 上述脚本中,每个命令都在末尾添加了"&"符号,
    的头像 发表于 11-08 10:23 951次阅读

    python调用windows命令

    Python是一种强大的编程语言,可以用于开发各种不同类型的应用程序。其中一个常见的用途是使用Python调用Windows命令来执行特定的任务。在本文中,我们将详细讨论如何使用Python调用
    的头像 发表于 11-29 14:34 1048次阅读