Redis主从复制的原理一 之 概述

概述

 本文概要性的介绍了Redis主从复制原理,及新旧版本主从复制的区别,优缺点。具体的主从复制过程可详见「Redis主从复制原理二 之 主从复制工作流程」

旧版主从复制的实现

 Redis的复制功能分为 同步(sync)和 命令传播(command propagate)两个操作:

1)同步操作:作用于将从服务器的数据库状态更新至主服务器当前所处的数据库状态。
2)命令传播:作用于在主服务器的数据库状态被修改,导致主从服务器的数据库状态出现不一致时,让主从服务器的数据库重新回到一致状态。

同步操作

 当客户端向从服务器发送SLAVEOF命令,要求从服务器复制主服务器时,从服务器首先需要执行同步操作,即,将从服务器的数据库状态更新至主服务器当前所处的数据库状态。
 从服务器通过向主服务器发送SYNC命令来进行同步操作,SYNC命令的执行步骤如下:

1)从服务器向主服务器发送SYNC命令。
2)收到SYNC命令的主服务器执行BGSAVE命令,在后台生成一个RDB文件,并使用一个缓冲区记录从现在开始执行的所有写命令。
3)当主服务器的BGSAVE命令执行完毕时,主服务器会将BGSAVE命令生成的RDB文件发送给从服务器,从服务器接受并载入这个RDB文件,将自己的数据库状态更新至主服务器执行BGSAVE命令时的数据库状态。
4)主服务器将记录在缓冲区里面的所有写命令发送给从服务器,从服务器执行这些写命令,将自己的数据库状态更新至主服务器数据库当前所处的状态。

命令传播

 同步操作执行完毕后,主从服务器两者的数据库状态达到了一致状态,但每当主服务器执行完客户端发送的写命令时,主从服务器的数据库状态将不一致。
 为了让主从服务器再一次回到一致状态,主服务器需要对从服务器执行命令传播操作:主服务器将自己执行的写命令,发送给从服务器执行,使主从服务器保持一致状态。

旧版复制功能的缺陷

Redis 2.8以前,从服务器对主服务器的复制可以分为如下两种情况:

1)初次复制:从服务器以前没有复制过任何主服务器,或从服务器当前要复制的主服务器和上一次复制的主服务器不同。
2)断线后重复制:处于命令传播阶段的主从服务器因为网络原因而中断了复制,但从服务器通过自动重连重新连接上了主服务器,并继续复制主服务器。

缺陷在于:断线重连后,从服务器将从新执行一遍初次复制的过程,发送SYNC命令给主服务器,主服务器执行BGSAVE命令生成RDB文件,同时将在此期间新执行的写命令加入缓冲区,当RDB文件生成完毕,将文件发送给从服务器,而后将缓冲区中新增的命令发送给从服务器,自此主从同步完成。

SYNC命令:一个非常耗资源的操作

1)主服务器需要执行BGSAVE命令来生成RDB文件,这个生成操作会耗费主服务器大量的CPU、内存和磁盘I/O资源。
2)主服务器需要将自己生成的RDB文件发送给从服务器,这个发送操作会耗费主从服务器大量的网络资源(带宽和流量),并对主服务器响应请求命令的时间产生影响。
3)接收到RDB文件的从服务器需要载入主服务器发来的RDB文件,并且在载入期间,从服务器会因为阻塞而没办法处理命令请求。

 所以Redis有必要保证在真正有需要时才执行SYNC命令。

新版复制功能

 为了解决旧版本复制功能在处理断线重复制情况时的低效问题,Redis从2.8版本开始,使用PSYNC命令代替SYNC命令来执行复制时的同步操作。

PSYNC命令

PSYNC命令具有完整完整重同步(full resychronization)和部分重同步(partial resychronization)两种模式:
1)完整重同步:用于处理初次复制情况:完整重同步执行步骤和SYNC命令的执行步骤基本一致。都是通过让主服务器执行BGSAVE命令生成RDB文件,并发送,以及向从服务器发送保存在缓冲区里面的写命令来进行同步。
2)部分重同步:用于处理断线重连后同步复制:当从服务器在断线后重新连接主服务器时,如果条件允许,主服务器可以将主服务器连接断开期间执行的写命令发送给从服务器,从服务器只要接受并执行这些命令,就可以将数据库更新至主服务器当前所处的状态。

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

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

相关文章

网络原理 4-TCP3

上篇文章,我们讲了TCP协议的连接管理(”三次握手“和”四次挥手“的过程)。 4、滑动窗口 这个滑动窗口是TCP中非常有特点的机制。我们知道,TCP是通过前面讲的三个机制:确认应答,超时重传,连接…

【使用 Loki + Promtail + Grafana 搭建轻量级容器日志分析平台】

使用 Loki Promtail Grafana 搭建轻量级容器日志分析平台 摘要 本文介绍如何通过 Docker Compose 快速搭建 Loki 日志存储、Promtail 日志采集和 Grafana 日志可视化/告警的完整流程。用最小化示例演示核心配置、常见问题排查和告警规则设置,帮助读者快速上手。…

CRMEB 中 PHP 快递查询扩展实现:涵盖一号通、阿里云、腾讯云

目前已有一号通快递查询、阿里云快递查询扩展 扩展入口文件 文件目录 crmeb\services\express\Express.php 默认一号通快递查询 namespace crmeb\services\express;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use think\Container; use thi…

使用 Python 自动化 Word 文档样式复制与内容生成

在办公自动化领域,如何高效地处理 Word 文档的样式和内容复制是一个常见需求。本文将通过一个完整的代码示例,展示如何利用 Python 的 python-docx 库实现 Word 文档样式的深度复制 和 动态内容生成,并结合知识库中的最佳实践优化文档处理流程…

【MATLAB代码】基于MCC(最大相关熵)的EKF,一维滤波,用于解决观测噪声的异常|附完整代码,订阅专栏后可直接查看

本文所述的代码实现了一种基于最大相关熵准则(Maximum Correntropy Criterion, MCC)的鲁棒性卡尔曼滤波算法(MCC-KF),重点解决传统卡尔曼滤波在观测噪声存在异常值时估计精度下降的问题。通过引入高斯核函数对残差进行加权处理,有效降低了异常观测值对状态估计的干扰。订…

46、web实验-遍历数据与页面bug修改

46、web实验-遍历数据与页面bug修改 在Web开发中,遍历数据和修改页面bug是常见的任务。以下是关于这两个主题的讲解: ### 一、遍历数据 **目的**:在页面上动态展示数据,例如用户列表、商品信息等。 **常用方法**: ####…

华为云Flexus+DeepSeek征文|体验华为云ModelArts快速搭建Dify-LLM应用开发平台并创建自己的自定义聊天助手

华为云FlexusDeepSeek征文|体验华为云ModelArts快速搭建Dify-LLM应用开发平台并创建自己的自定义聊天助手 什么是华为云ModelArts 华为云ModelArts ModelArts是华为云提供的全流程AI开发平台,覆盖从数据准备到模型部署的全生命周期管理,帮助…

Qwen大语言模型里,<CLS>属于特殊的标记:Classification Token

Qwen大语言模型里,<CLS>属于特殊的标记:Classification Token 目录 Qwen大语言模型里,<CLS>属于特殊的标记:Classification Token功能解析工作机制应用场景举例说明技术要点在自然语言处理(NLP)领域 都是<CLS> + <SEP>吗?一、CLS和SEP的作用与常见用法1. **CLS标…

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…

JAVA毕业设计224—基于Java+Springboot+vue的家政服务系统(源代码+数据库)

毕设所有选题: https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue的家政服务系统(源代码数据库)224 一、系统介绍 本项目前后端分离,分为用户、家政人员、管理员三种角色 1、用户: 登录、注册、轮播…

滴滴 服务端 面经

一、缓存与数据库的使用场景及性能差异 1. 缓存的适用场景 高频读、低频写场景:如商品详情页、用户信息等读多写少的数据,减少数据库压力。实时性要求不高的数据:如首页推荐列表、统计数据(非实时更新),允…

linux操作系统---网络协议

目录 案例演练----网络搭建 路由启配置 多个路由情况下如何联通 静态路由 案例演练----网络搭建 Cisco交换机的命令行用户模式1 switch> 特权模式1 switch>enable disable回到用户模式 2 switch#全局配置模式1 switch#config terminal 2 switch(co…

华为OD机试_2025 B卷_计算某个字符出现次数(Python,100分)(附详细解题思路)

文章目录 题目描述字符计数解析:简单高效的统计方法核心解题思路完整代码实现应用场景扩展 题目描述 写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字符,然后输出"输入字符串(第二行输入的字符&a…

华为仓颉语言初识:并发编程之同步机制(上)

前言 线程同步机制是多线程下解决线程对共享资源竞争的主要方式,华为仓颉语言提供了三种常见的同步机制用来保证线程同步安全,分别是原子操作,互斥锁和条件变量。本篇文章详细介绍主要仓颉语言解决同步机制的方法,建议点赞收藏&a…

树莓派远程登陆RealVNC Viewer出现卡顿

原因是:没有连接显示屏,图像传输会受到限制。 没有显示屏怎么解决: 📝 树莓派5虚拟显示器配置教程(强制启用全性能GPU渲染) 🔧 步骤1:安装虚拟显示驱动 bash 复制 下载 # 更…

go-zero微服务入门案例

一、go-zero微服务环境安装 1、go-zero脚手架的安装 go install github.com/zeromicro/go-zero/tools/goctllatest2、etcd的安装下载地址根据自己电脑操作系统下载对应的版本,具体的使用自己查阅文章 二、创建一个user-rpc服务 1、定义user.proto文件 syntax &qu…

[BIOS]VSCode zx-6000 编译问题

前提:Python 3.6.6及以上版本安装成功,Python 3.6.6路径加到了环境变量# DEVITS工具包准备好 问题:添加环境变量 1:出现环境变量错误,“py -3” is not installed or added to environment variables #先在C:\Windows里…

【Linux】系统部分——进程控制

11.进程控制 文章目录 11.进程控制一、进程创建二、进程终止退出码进程终止的方式 三、进程等待进程等待的方式获取⼦进程status小程序阻塞与非阻塞等待 四、进程程序替换替换原理进程程序替换的接口——exec替换函数 五、总结 一、进程创建 之前学习了fork()函数创建子进程&a…

【读论文】U-Net: Convolutional Networks for Biomedical Image Segmentation 卷积神经网络

摘要1 Introduction2 Network Architecture3 Training3.1 Data Augmentation 4 Experiments5 Conclusion背景知识卷积激活函数池化上采样、上池化、反卷积softmax 归一化函数交叉熵损失 Olaf Ronneberger, Philipp Fischer, Thomas Brox Paper:https://arxiv.org/ab…

蓝牙音乐(A2DP)音频延迟的一些感想跟分析,让你对A2DP体验更佳深入

零.声明 最近做蓝牙协议栈的过程中遇到一些客户偶尔提报音频延迟的问题,所以引发了一些感想,跟大家分享下,音频延迟主要的影响范围是对一些要求实时性比较高的场景有比较差的体验 连接蓝牙看视频的过程中,发现音画不同步&#x…