我的编程空间,编程开发者的网络收藏夹
学习永远不晚

redis系列之-

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

redis系列之-

什么是主从复制

Redis的主从复制机制是指可以让从服务器(slave)能精确复制主服务器(master)的数据,如下图所示:

 

         

或者   

       

 

主从复制的方式和工作原理

工作方式:

Redis主从复制主要有两种模式:完整重同步(full resynchronization)和部分重同步(partial resynchronization)

  • 其中完整重同步用于处理初次复制情况:完整重同步的执行步骤和SYNC命令的执行步骤基本一样,它们都是通过让主服务器创建并发送RDB文件,以及向从服务器发送保存在缓冲区里面的写命令来进行同步;
  • 而部分重同步则用于处理断线后重复制情况:当从服务器在断线后重新连接主服务器时,如果条件允许,主服务器可以将主从服务器连接断开期间执行的写命令发送给从服务器,从服务器只要接收并执行这些写命令,就可以将数据库更新至主服务器当前所处的状态。

完整同步机制,我们非常好理解。比如从机首次连接到主机后,那么就是完整同步了。此时主机把RDB文件打包发送给从机,从机同步即可。

如果在此期间,主机源源不断的有新的命令,那么全部放入到缓冲区中,然后进行部分同步,将缓冲区里面的数据发送给从机即可。

部分同步还有一种使用情况就是,网络不稳定,断了之后,从机和主机的同步。也是用到了部分同步机制。

 

原理:

部分重同步功能由以下三个部分构成:

  • 主服务器的复制偏移量(replication offset)和从服务器的复制偏移量;
  • 主服务器的复制积压缓冲区(replication backlog);
  • 服务器的运行ID(run ID)。

 

复制偏移量

执行复制的双方——主服务器和从服务器会分别维护一个复制偏移量:

  • 主服务器每次向从服务器传播N个字节的数据时,就将自己的复制偏移量的值加上N;
  • 从服务器每次收到主服务器传播来的N个字节的数据时,就将自己的复制偏移量的值加上N;

通过对比主从服务器的复制偏移量,程序可以很容易地知道主从服务器是否处于一致状态:

  • 如果主从服务器处于一致状态,那么主从服务器两者的偏移量总是相同的;
  • 相反,如果主从服务器两者的偏移量并不相同,那么说明主从服务器并未处于一致状态。

如下面的情况:

 

复制积压缓冲区

如果发现偏移量不一样,那么就会需要用到缓冲区了。

复制积压缓冲区是由主服务器维护的一个固定长度(fixed-size)先进先出(FIFO)队列,默认大小为1MB。

当主服务器进行命令传播时,它不仅会将写命令发送给所有从服务器,还会将写命令入队到复制积压缓冲区里面,如图所示。

 

当从服务器重新连上主服务器时,从服务器会通过PSYNC命令将自己的复制偏移量offset发送给主服务器,主服务器会根据这个复制偏移量来决定对从服务器执行何种同步操作:

  • 如果offset偏移量之后的数据(也即是偏移量offset+1开始的数据)仍然存在于复制积压缓冲区里面,那么主服务器将对从服务器执行部分重同步操作;
  • 相反,如果offset偏移量之后的数据已经不存在于复制积压缓冲区,那么主服务器将对从服务器执行完整重同步操作。

 

服务器运行ID

除了复制偏移量和复制积压缓冲区之外,实现部分重同步还需要用到服务器运行ID(run ID):

  • 每个Redis服务器,不论主服务器还是从服务,都会有自己的运行ID
  • 运行ID在服务器启动时自动生成,由40个随机的十六进制字符组成,例如53b9b28df8042fdc9ab5e3fcbbbabff1d5dce2b3;

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

redis系列之-

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

redis系列之-

什么是主从复制Redis的主从复制机制是指可以让从服务器(slave)能精确复制主服务器(master)的数据,如下图所示:          或者           主从复制的方式和工作原理工作方式:Redis主从复制主要有两种模式:完整重同步(full
redis系列之-
2017-12-10

Redis系列(一)Redis入门

NoSQL 开发中或多或少都会用到,也是面试必问知识点。最近这几天的面试每一场都问到了。但是感觉回答的并不好,还有很多需要梳理的知识点。这里通过几篇 Redis 笔记整个梳理一遍,后面再加上面试题。Redis 系列:1. Redis系列(一)Redis入门2.
Redis系列(一)Redis入门
2020-02-02

Redis系列(七)Redis面试题

Redis 面试题 Redis 系列:Redis系列(一)Redis入门Redis系列(二)Redis的8种数据类型Redis系列(三)Redis的事务和Spring Boot整合Redis系列(四)Redis配置文件和持久化Redis系列(五)
Redis系列(七)Redis面试题
2018-02-10

Redis系列(九):Redis的事务机制

提到事务,相信大家都不陌生,事务的ACID四大特性,也是面试时经常问的,不过一般情况下,我们可能想到的是传统关系型数据库的事务,其实,Redis也是提供了事务机制的,本篇博客就来讲解下Redis的事务机制。1. 事务演示Redis的事务提供了一种将多个命令请求
Redis系列(九):Redis的事务机制
2016-07-18

Flask 系列之 Bootstrap-

说明操作系统:Windows 10Python 版本:3.7x虚拟环境管理器:virtualenv代码编辑器:VS Code实验目标通过使用 Bootstrap-Flask 来进行页面美化,为网站应用上 Bootstrap4.x 的样式。由
2023-01-31

Flask 系列之 LoginManag

说明操作系统:Windows 10Python 版本:3.7x虚拟环境管理器:virtualenv代码编辑器:VS Code实验目标通过使用 flask-login 进行会话管理的相关操作,并完成用户合法性登陆和退出。安装pip insta
2023-01-31

ES6系列之Generator

一、什么是Generator 函数1.1 语法学习 Generator 语法,你需要了解function* 、yield、next三个基本概念。function* 用来声明一个函数是生成器函数,它比普通的函数声明多了一个*,*的位置比较随意
2023-06-03

Flask 系列之 FlaskForm

通过使用 FlaskForm ,可以方便快捷的实现表单处理。说明操作系统:Windows 10Python 版本:3.7x虚拟环境管理器:virtualenv代码编辑器:VS Code实验目标通过使用 flask_wtf 进行表单的相关操作
2023-01-31

Flask 系列之 Migration

说明操作系统:Windows 10Python 版本:3.7x虚拟环境管理器:virtualenv代码编辑器:VS Code实验目标通过使用 flask-migrate 实现数据库的迁移操作实验安装环境包pip install flaskp
2023-01-31

Flask 系列之 SQLAlchemy

SQLAlchemy 是一种 ORM 框架,通过使用它,可以大大简化我们对数据库的操作,不用再写各种复杂的 sql语句 了。说明操作系统:Windows 10Python 版本:3.7x虚拟环境管理器:virtualenv代码编辑器:VS
2023-01-31

Flask 系列之 Blueprint

说明操作系统:Windows 10Python 版本:3.7x虚拟环境管理器:virtualenv代码编辑器:VS Code实验目标学习如何使用 Blueprint介绍接触过 DotNet MVC 开发的朋友应该都对 路由 的概念有一定的了
2023-01-31

Openssl之PEM系列

Openssl之PEM系列1.PEM编码文件结构介绍PEM全称是Privacy Enhanced Mail,该标准定义了加密一个准备要发送邮件的标准,主要用来将各种对象保存成PEM格式,并将PEM格式的各种对象读取到相应的结构中。它的基本流
2023-06-04

Flask 系列之 Pagination

说明操作系统:Windows 10Python 版本:3.7x虚拟环境管理器:virtualenv代码编辑器:VS Code实验目标实现当前登录用户的事务浏览、添加、删除 操作实现首先,在我们的 todolist\forms.py 中添加事
2023-01-31

OpenStack Juno系列之L3

OpenStack L3 HA agent and VRRPactive/active此方案描述利用了模块化layer 2 (ML2) 插件与Open vSwitch (OVS) OpenStack对 Networking Layer 3
2023-01-31

Redis系列(一):Redis简介及环境安装

提到Redis,大家肯定都听过,并且应该都在项目中或多或少的使用过,也许你觉得Redis用起来挺简单的呀,但如果有人问你下面的几个问题(比如同事或者面试官),你能回答的上来吗?什么是Redis?Redis能存储哪几种数据结构?Redis有几种持久化机制?它们的
Redis系列(一):Redis简介及环境安装
2014-11-29

Redis系列(一):小试牛刀

随着互联网的高速发展,传统的关系数据库(如MySQL、Microsoft SQL Server等)已不能满足日益增长的业务需求,如商品秒杀、抢购等及时性非常强的功能,随着应用高并发的访问,会造成系统数据库崩溃,为了解决此种情况,需要引用一个缓存中间件,市面上比
Redis系列(一):小试牛刀
2018-12-10

编程热搜

目录