Redis主从复制原理

持久化机制是在一台Redis主机上进行操作,如果这台机器出了问题,如果是持久化数据的硬盘出了问题,那数据就会丢失。主从复制就是为了解决单点故障的。

 同时,主从模式下采用的是读写分离来对外提供服务

 于是,将主服务器和从服务器之间的数据保持一致性就显得很重要了。

第一次同步

主要有三个步骤:

第一阶段:建立链接、协商同步。从服务器发送psync命令,包含两个参数,runid和offset,第一次全量复制会将offset设置为-1,runid设置为?;主服务器收到psync命令后,会用FULLPESYNC来作为响应

第二阶段:主服务器同步数据给从服务器。 主服务器通过bgsave(异步)生成RDB文件,发给从服务器,然后从服务器收到RDB文件后,会先清空自己的数据,然后加载RDB文件。

第三阶段:主服务器发送新写的操作命令给从服务器。 第二阶段的过程中,主服务器生成RDB文件的时候,主服务器发送RDB文件给从服务器的时候,从服务器加载RDB文件的时候,如果主服务器有新产生的数据,这个时候,为了保证数据的一致性,会执行第三阶段,上面三个时间段里面新生成的数据会被主服务器写到replication buffer缓冲区里面。

增量复制

主从服务器网络断开又恢复后,从服务器会采用增量复制的方式继续同步。

这个过程的增量复制主要有三个步骤

第一阶段:从服务器恢复网络之后,会发送psync命令给主服务器,此时的psync命令里面的offset参数不是-1

第二阶段:从服务器收到该命令之后,使用CONTINUE响应命令告诉从服务器接下来采取增量复制的方式同步数据

第三阶段:主服务器将主从服务器断线期间,所执行的写命令发送给从服务器,然后从服务器执行这些命令。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/53640.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Cocos Creator的 Cannot read property ‘applyForce‘ of undefined报错

序: 1、博主是看了这个教程操作的时候出的bug>游戏开发 | 17节课学会如何用Cocos Creator制作3D跑酷游戏 | P9 代码控制对象移动_哔哩哔哩_bilibili 2、其实问题不是出在代码上,但是发现物体就是不平移 3、node全栈的资料》node全栈框架 正文…

AMEYA360:瑞萨电子MCU和MPU产品线将支持Microsoft Visual Studio Code

全球半导体解决方案供应商瑞萨电子宣布其客户现可以使用Microsoft Visual Studio Code(VS Code)开发瑞萨全系列微控制器(MCU)和微处理器(MPU)。瑞萨已为其所有嵌入式处理器开发了工具扩展,并将其…

QTableWidget对单元格(QWidget/QTableWidgetItem)的内存管理[clearContents()]

目录 现象结论代码验证clearContents() 会释放QTableWidgetItem 和QWidget 对象,但是不指向nullptrmemorytable.hmemorytable.cpp断点情况 验证clearContents()是延时释放QWidget 的而QTableWidgetItem 立即释放 现象 结论 clearContents() 会清除表格中的所有单元格…

Unity 引擎做残影效果——2、屏幕后处理方式

Unity实现残影效果 大家好,我是阿赵。 这里继续介绍Unity里面做残影的方法。之前介绍了BakeMesh的方法做残影,这一期介绍的是用屏幕后处理的方法做残影。 一、原理 之前的BakeMesh方法,是真的生成了很多个网格模型在场景里面。如果用后处理做…

自建类ChatGPT服务:本地化部署与远程访问教程

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

Android Studio安装AI编程助手Github Copilot

csdn原创谢绝转载 简介 文档链接 https://docs.github.com/en/copilot/getting-started-with-github-copilot 它是个很牛B的编程辅助工具,装它,快装它. 支持以下IDE: IntelliJ IDEA (Ultimate, Community, Educational)Android StudioAppC…

Qt开发,编译报错:error: C2001: 常量中有换行符

一、问题描述 Qt开发,编译报错:error: C2001: 常量中有换行符 E:\work\xxx.cpp:1: warning: C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 E:\work\xxx.cpp:66: error: C2001: 常量中有换行符 E…

Vue 路由 router 配置(四)

一、下载 router 组件 1.1 删除文件 先把第三小节里面默认生成的文件删除干净,只剩下 main.js 和 App.vue,内容如下所示: import Vue from vue import App from ./AppVue.config.productionTip false;new Vue({el: #app,components…

人工智能学习07--pytorch23--目标检测:Deformable-DETR训练自己的数据集

参考 https://blog.csdn.net/qq_44808827/article/details/125326909https://blog.csdn.net/dystsp/article/details/125949720?utm_mediumdistribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-125949720-blog-125326909.235^v38^pc_releva…

2023年【零声教育】13代C/C++Linux服务器开发高级架构师课程体系分析

对于零声教育的C/CLinux服务器高级架构师的课程到2022目前已经迭代到13代了,像之前小编也总结过,但是课程每期都有做一定的更新,也是为了更好的完善课程跟上目前互联网大厂的岗位技术需求,之前课程里面也包含了一些小的分支&#…

react ant add/change created_at

1.引入ant的 Table import { Table, Space, Button, message } from antd; 2.获得接口的数据的时候增加上创建时间 const response await axios.get(${Config.BASE_URL}/api/v1/calculation_plans?token${getToken()});if (response.data.message ok) {const data respon…

【验证测试】未初始化的全局变量和局部变量的初值

验证目标&#xff1a; 未初始化的全局变量的初值为 0未初始化的局部变量的初值为随机值 测试用例&#xff1a; #include <stdio.h>char gval1; int gval2; static long gval3;int main() {unsigned char uchTmp1;unsigned int uTmp2;printf("%d\n", gval1)…