Redis PSYNC命令

Redis PSYNC命令是用于在主从复制中进行部分重同步的命令,可以用来提高从节点的同步效率和可靠性。它分为完整重同步(full synchronization)和部分重同步(partial synchronization),主要用于从节点在断线后重新连接到主节点时,快速恢复数据同步的场景。

完整重同步

完整重同步是指从节点存在磁盘上的Redis快照文件和AOF日志文件已经损坏或者被删除,需要从主节点重新同步所有数据的情况下所使用的同步方式。完整重同步的过程如下:

  1. 从节点向主节点发送PSYNC命令,请求进行完整重同步。
  2. 主节点收到请求后,向从节点发送RDB文件(Redis快照文件)的完整副本。
  3. 当从节点接收完整快照文件后,执行快照恢复流程,将自己的数据清空,并使用接收到的快照文件的内容进行恢复。
  4. 从节点向主节点发送SYNC命令,请求进行增量同步。

完整重同步的缺点是需要传输整个快照文件,网络带宽占用量大,因此只有在从节点的数据完全被损坏或者丢失时才使用。

部分重同步

部分重同步是指从节点在断线重连时可以根据主节点的情况判断出自己的数据已经和主节点同步到了哪个位置,只同步丢失的那部分数据,从而快速恢复数据同步的方式。具体流程如下:

  1. 从节点向主节点发送PSYNC命令,请求进行部分重同步。
  2. 主节点根据从节点提供的复制偏移量和当前正在使用的AOF文件和执行的命令来判断是否可以进行部分重同步。
  3. 如果可以进行部分重同步,主节点发送未被从节点复制的AOF日志和RDB文件的增量副本,从节点接收并执行增量副本,从而实现同步。
  4. 如果无法进行部分重同步,主节点发送全量的RDB文件给从节点,从节点进行完整重同步流程。

部分重同步与完整重同步相比,优点在于只需要传输丢失的数据,网络带宽占用量小,因此是从节点正常断线后再次连接的首选同步方式。

实例说明

假设主节点IP地址为10.0.0.1,从节点IP地址为10.0.0.2,在连接断线重连的情况下使用Redis PSYNC命令。

示例1:完整重同步

从节点的数据已经完全丢失,需要使用完整重同步方式恢复数据同步。

# 在从节点上执行
127.0.0.1:6379> PSYNC full

示例2:部分重同步

从节点和主节点断线后重新连接,可以使用部分重同步方式恢复数据同步。

# 在从节点上执行
127.0.0.1:6379> PSYNC 1234 0

其中,1234是从节点最后接收到的主节点复制偏移量,0是从节点当前的复制偏移量,表示从节点需要同步从偏移量为1234(不包括这个偏移量)至从偏移量为0(包括这个偏移量)之间的数据。如果无法进行部分重同步,将会自动转义为完整重同步方式。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Redis PSYNC命令 - Python技术站

(0)
上一篇 2023年3月28日
下一篇 2023年3月28日

相关文章

  • [Redis]Redis的数据类型

    存储String字符串,使用get,set命令,一个键最大存储512M   存储Hash哈希,使用HMSET和HGETALL命令,参数:键,值 例如:HMSET user:1 username taoshihan password taoshihan HGETALL user:1   存储List列表,可以重复,使用命令lpush和lrange,lpush的…

    Redis 2023年4月11日
    00
  • 太坑了吧!一次某某云上的redis读超时排查经历

    一次排查某某云上的redis读超时经历 性能排查,服务监控方面的知识往往涉及量广且比较零散,如何较为系统化的分析和解决问题,建立其对性能排查,性能优化的思路,我将在这个系列里给出我的答案。 问题背景 最近一两天线上老是偶现的redis读超时报警,并且是业务低峰期间,甚是不解,于是开始着手排查。 以下是我的排查思路。 排查思路 查阅 redis 慢查询日志 既…

    Redis 2023年4月13日
    00
  • Flink 三种Sink redis,es和jdbc

    一、redis sink 对应jar包 <dependency> <groupId>org.apache.bahir</groupId> <artifactId>flink-connector-redis_2.11</artifactId> <version>1.0</versio…

    Redis 2023年4月13日
    00
  • redis、memcached、mongoDB 对比

    Mongodb和Memcached不是一个范畴内的东西。Mongodb是文档型的非关系型数据库,其优势在于查询功能比较强大,能存储海量数据。Mongodb 和 Memcached不存在谁替换谁的问题。  Memcached 和 Redis它们都是内存型数据库,数据保存在内存中,通过tcp直接存取,优势是速度快,并发高。  Memcached 是一个高性能的分…

    Redis 2023年4月12日
    00
  • 如何实现千万级优惠文章的优惠信息同步

    金融社区优惠文章是基于京东商城优惠商品批量化自动生成的,每日通过不同的渠道获取到待生成的SKU列表,并根据条件生成优惠文章。 但是,生成优惠文章之后续衍生问题:该商品无优惠了,对应文章需要做取消推荐或下架处理,怎样能更快的知道该商品无优惠了呢? 作者:京东科技 文涛 背景 金融社区优惠文章是基于京东商城优惠商品批量化自动生成的,每日通过不同的渠道获取到待生成…

    Redis 2023年4月10日
    00
  • Redis QUIT命令

    Redis QUIT命令 简介 Redis QUIT命令用于关闭当前连接。在成功关闭前,Redis将等待当前连接发送的命令执行完成并返回结果,然后立即关闭连接。 语法 QUIT 返回值 总是返回 OK。 使用方法 在Redis客户端中,只需要输入QUIT命令即可关闭当前连接。在Redis服务器端,可以使用客户端发送QUIT命令来关闭当前连接,也可以使用red…

    Redis 2023年3月28日
    00
  • Redis SINTERSTORE命令

    Redis SINTERSTORE命令 Redis中的SINTERSTORE命令用于获取多个集合的交集,并将结果集保存到一个新的集合中。SINTERSTORE命令的语法如下: SINTERSTORE destination key [key …] 其中destination是新集合的名称,key [key …]是要进行交集运算的原集合名称。如果只有一个k…

    Redis 2023年3月27日
    00
  • Redis RPOPLPUSH命令

    Redis RPOPLPUSH命令的作用是将一个列表的尾部元素弹出,并插入到另一个列表的头部。该命令的使用方法如下: RPOPLPUSH source destination 其中,source表示源列表的名称,destination表示目标列表的名称。执行该命令后,源列表中的尾部元素将会被弹出,并插入到目标列表的头部。 该命令的返回值为被弹出的元素的值。 …

    Redis 2023年3月27日
    00
合作推广
合作推广
分享本页
返回顶部