zoukankan      html  css  js  c++  java
  • Redis多机常用架构-主从

    本文内容摘录自同事Perry Zhang的讲解,如需转载须本人同意。

    1.主从

    命令:slaveof <IP><PORT>

    redis主从配置:redis支持master-slave的主从配置,配置方法是在从机的配置文件中指定slaveof参数为主机的ip和port即可

    将一台服务器(Slave)变成为另外一个服务器(Master)的复制品

    image

    复制过程:

    1. Slave向Master发送 Sync命令

    2. 接到 Sync命令的Master会调用BGSAVE ,创建一个 RDB 文件,并使用Backlog记录接下来执行的所有写命令

    3. 当Master执行完 BGSAVE 命令时,它会向Slave发送 RDB 文件,而Slave则会接收并载入这个文件

    4. Master将Backlog储存的所有写命令发送给Slave执行

    image

    image

    Sync 命令同步后,主从会达到暂时的数据一致性。

    数据不一致:Master执行了新的写命令,则主从数据又将不一致

    image

    5. 在主从完成同步之后,Master每执行一个写命令,它都会将被执行的写命令发送给Slave执行,这个操作被称为 “Command Propagate”

    Command Propagate是持续的过程:只要复制仍在继续,命令传播就会一直进行,使得主从的状态可以一直保持一致

    image

    之后每当有什么新的写命令被执行了,比如 SET k7 v7、SET k8 v8 等等,Master也会继续将命令传播给Slave执行。

    2.8之后,Redis使用PSync命令代替Sync

    PSync最大特性:部分重同步(Partial Resync)

    为什么采用部分重同步技术?

    在主从断线并且重新连接的时候,只要条件允许,PSYNC 可以让Master只向Slave同步断线期间缺失的数据,而不用重新向Slave同步整个库

    Sync断线重连过程

    image

    PSync断线重连过程

    image

    复制的数据一致性问题

    理论上会出现复制不一致的情况:在Master执行完写命令直到Slave执行完写命令的这段时间里,如下例

    Redis 目前的复制实现只保证最终一致性,而不是强一致性

    image

  • 相关阅读:
    proto,生成指定包名的java类
    龋齿比较深了还能补吗
    Spring Security with JWT for REST API[转]
    ci-Model使用方法
    ci-crud增删改查基本操作
    openjdk11 下载地址
    System.InvalidOperationException: Unable to configure HTTPS endpoint. No server certificate was specified, and the default developer certificate could not be found or is out of date.
    Newtonsoft.Json高级用法之枚举中文转义
    java中文与unicode编码之间的转换
    SpringBoot参数校验-Validator
  • 原文地址:https://www.cnblogs.com/janehoo/p/6118890.html
Copyright © 2011-2022 走看看