返回顶部
首页 > 资讯 > 数据库 >redis系列之-
  • 776
分享到

redis系列之-

redis系列之- 2017-12-10 05:12:31 776人浏览 无得
摘要

什么是主从复制 Redis的主从复制机制是指可以让从服务器(slave)能精确复制主服务器(master)的数据,如下图所示:             或者              主从复制的方式和工作原理 工作方式: 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;
您可能感兴趣的文档:

--结束END--

本文标题: redis系列之-

本文链接: https://lsjlt.com/news/2168.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • redis系列之-
    什么是主从复制 Redis的主从复制机制是指可以让从服务器(slave)能精确复制主服务器(master)的数据,如下图所示:             或者              主从复制的方式和工作原理 工作方式: Redis主从复制...
    99+
    2017-12-10
    redis系列之-
  • Redis系列(一)Redis入门
    NoSQL 开发中或多或少都会用到,也是面试必问知识点。最近这几天的面试每一场都问到了。但是感觉回答的并不好,还有很多需要梳理的知识点。这里通过几篇 Redis 笔记整个梳理一遍,后面再加上面试题。 Redis 系列: ...
    99+
    2020-02-02
    Redis系列(一)Redis入门
  • Redis系列--2、Redis配置
    1、Redis配置在Redis有配置文件(redis.conf)可在Redis的根目录下找到。可以通过Redis的CONFIG命令设置所有Redis的配置。2、配置文件说明:1. Redis默认不是以守护进...
    99+
    2024-04-02
  • Redis系列(七)Redis面试题
    Redis 面试题 Redis 系列: Redis系列(一)Redis入门 Redis系列(二)Redis的8种数据类型 Redis系列(三)Redis的事务和Spring Boot整合 Redis系...
    99+
    2018-02-10
    Redis系列(七)Redis面试题
  • Redis系列--3、Redis数据类型
    Redis支持5种数据类型,它们描述如下:Strings - 字符串Redis的字符串是字节序列。在Redis中字符串是二进制安全的,这意味着他们有一个已知的长度,是没有任何特殊字符终止决定的,所以可以存储...
    99+
    2024-04-02
  • Redis系列(九):Redis的事务机制
    提到事务,相信大家都不陌生,事务的ACID四大特性,也是面试时经常问的,不过一般情况下,我们可能想到的是传统关系型数据库的事务,其实,Redis也是提供了事务机制的,本篇博客就来讲解下Redis的事务机制。 1. 事务演示 Red...
    99+
    2016-07-18
    Redis系列(九):Redis的事务机制
  • Java系列之Predicate
    Java8引入了许多函数式接口(Functional Interface),Predicate(断言)就是其中一个,它的主要作用可以简单描述为:向其传入一个对象(可以理解为参数),将得到一个布尔值作为...
    99+
    2023-09-01
    java Java8 Optional 断言 函数式编程
  • Flask 系列之 Migration
    说明 操作系统:Windows 10 Python 版本:3.7x 虚拟环境管理器:virtualenv 代码编辑器:VS Code 实验目标 通过使用 flask-migrate 实现数据库的迁移操作 实验 安装环境包 pip i...
    99+
    2023-01-31
    系列之 Flask Migration
  • Flask 系列之 Blueprint
    说明 操作系统:Windows 10 Python 版本:3.7x 虚拟环境管理器:virtualenv 代码编辑器:VS Code 实验目标 学习如何使用 Blueprint 介绍 接触过 DotNet MVC 开发的朋友应该都对...
    99+
    2023-01-31
    系列之 Flask Blueprint
  • Flask 系列之 SQLAlchemy
    SQLAlchemy 是一种 ORM 框架,通过使用它,可以大大简化我们对数据库的操作,不用再写各种复杂的 sql语句 了。 说明 操作系统:Windows 10 Python 版本:3.7x 虚拟环境管理器:virtualenv...
    99+
    2023-01-31
    系列之 Flask SQLAlchemy
  • Flask 系列之 FlaskForm
    通过使用 FlaskForm ,可以方便快捷的实现表单处理。 说明 操作系统:Windows 10 Python 版本:3.7x 虚拟环境管理器:virtualenv 代码编辑器:VS Code 实验目标 通过使用 flask_...
    99+
    2023-01-31
    系列之 Flask FlaskForm
  • Flask 系列之 Bootstrap-
    说明 操作系统:Windows 10 Python 版本:3.7x 虚拟环境管理器:virtualenv 代码编辑器:VS Code 实验目标 通过使用 Bootstrap-Flask 来进行页面美化,为网站应用上 Bootstra...
    99+
    2023-01-31
    系列之 Flask Bootstrap
  • Flask 系列之 LoginManag
    说明 操作系统:Windows 10 Python 版本:3.7x 虚拟环境管理器:virtualenv 代码编辑器:VS Code 实验目标 通过使用 flask-login 进行会话管理的相关操作,并完成用户合法性登陆和退出。 ...
    99+
    2023-01-31
    系列之 Flask LoginManag
  • Flask 系列之 Pagination
    说明 操作系统:Windows 10 Python 版本:3.7x 虚拟环境管理器:virtualenv 代码编辑器:VS Code 实验目标 实现当前登录用户的事务浏览、添加、删除 操作 实现 首先,在我们的 todolist\f...
    99+
    2023-01-31
    系列之 Flask Pagination
  • ES6系列之Generator
    一、什么是Generator 函数1.1 语法学习 Generator 语法,你需要了解function* 、yield、next三个基本概念。function* 用来声明一个函数是生成器函数,它比普通的函数声明多了一个*,*的位置比较随意...
    99+
    2023-06-03
  • Openssl之PEM系列
    Openssl之PEM系列1.PEM编码文件结构介绍PEM全称是Privacy Enhanced Mail,该标准定义了加密一个准备要发送邮件的标准,主要用来将各种对象保存成PEM格式,并将PEM格式的各种对象读取到相应的结构中。它的基本流...
    99+
    2023-06-04
  • springboot整合redis之消息队列
    目录一、项目准备二、配置类三、redis中list数据类型定时器监听队列运行即监控队列四、发布/订阅模式五、ZSet实现延迟队列一、项目准备 依赖 <!-- R...
    99+
    2024-04-02
  • Redis系列(一):小试牛刀
    随着互联网的高速发展,传统的关系数据库(如MySQL、Microsoft SQL Server等)已不能满足日益增长的业务需求,如商品秒杀、抢购等及时性非常强的功能,随着应用高并发的访问,会造成系统数据库崩溃,为了解决此种...
    99+
    2018-12-10
    Redis系列(一):小试牛刀
  • OpenStack Juno系列之L3
    OpenStack L3 HA agent and VRRPactive/active此方案描述利用了模块化layer 2 (ML2) 插件与Open vSwitch (OVS) OpenStack对 Networking Layer 3 ...
    99+
    2023-01-31
    系列之 OpenStack Juno
  • Redis系列(一):Redis简介及环境安装
    提到Redis,大家肯定都听过,并且应该都在项目中或多或少的使用过,也许你觉得Redis用起来挺简单的呀,但如果有人问你下面的几个问题(比如同事或者面试官),你能回答的上来吗? 什么是Redis? Redis能存储哪几种数据结构...
    99+
    2014-11-29
    Redis系列(一):Redis简介及环境安装
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作