Redis PSYNC命令

yizhihongxing

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] list底层的数据结构

    前面我们使用list实现过队列 , 现在就来看一下list的底层结构 list有两种实现方式: 1. 压缩链表 压缩列表(ziplist)是Redis为了节省内存而开发的,是由一系列特殊编码的连续内存块组成的顺序型数据结构,一个压缩列表可以包含任意多个节点(entry),每个节点可以保存一个字节数组或者一个整数值。重点是内存连续 2.双端链表 prev和ne…

    Redis 2023年4月11日
    00
  • php读取文件使用redis的pipeline(管道)导入大批量数据

    需求:需要做一个后台上传TXT文件,读取其中的内容,然后导入redis库中。要求速度快,并且支持至少10W以上的数据,而内容也就一个字段存类似openid和QQ 传统做法:我一开始做的时候就老套路,遍历、hset,然后就发现非常的慢,一千条数据就花了30-32秒,当时就觉得不行,于是就请教了一个大佬,然后就得知了方法 我生成了20W的数据用来做测试,文件大小…

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

    Redis HGETALL命令详解 Redis是一个高性能的key-value存储系统,支持多种数据类型。其中,哈希(Hash)数据类型是一种将多个键值对存储在一个Redis键下的复合类型数据结构。在哈希数据类型中,HGETALL是常用的一个命令。 HGETALL命令作用 HGETALL命令用于获取指定哈希字段(field)的所有键值对(key-value)…

    Redis 2023年3月27日
    00
  • 如何使用 Redis 的 Lua 脚本实现分布式缓存?

    以下是详细讲解如何使用 Redis 的 Lua 脚本实现分布式缓存的完整使用攻略。 Redis Lua 脚本简介 Redis Lua 脚本是 Redis 提供的一种脚本言,可以在服务器端执行。Redis Lua 脚本用于实现复杂的业务逻辑,如分布式缓存、分布式锁等。 Redis Lua 脚本实现分布式缓存 在 Redis 中,可以使用 Lua 脚本实现分布式…

    python 2023年5月12日
    00
  • 【Redis 技术探索】「数据迁移实战」手把手教你如何实现在线 + 离线模式进行迁移Redis数据实战指南(离线同步数据)

    离线迁移 与在线迁移相比,离线迁移适宜于源实例与目标实例的网络无法连通的场景,或者源端实例部署在其他云厂商Redis服务中,无法实现在线迁移。 存在的问题 由于生产环境的各种原因,我们需要对现有服务器进行迁移,包括线上正在运行的redis集群环境 如何去做? 涉及到数据源变动,原有数据如何平滑迁移到新实例,从而可以实现无缝迁移? 方案汇总 save/bgsa…

    2023年4月9日
    00
  • Redis SETRANGE命令

    Redis SETRANGE命令详解 SETRANGE命令作用 Redis的SETRANGE key offset value命令用于覆盖指定键的字符串值的一部分,从偏移量offset开始,一直覆盖value的长度。 如果键不存在,则会返回一个空字符串。如果字符串的长度小于偏移量,则在执行SET命令之前,使用空字节进行填充,以便扩展字符串的长度。 SETRA…

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

    Redis PEXPIRE命令是一个非常常用的命令,它可以设置一个key的过期时间,过期时间的单位为毫秒。当key被设置过期时间后,自动算起到达过期时间时,Redis会自动删除该key。 PEXPIRE命令的使用方法如下: PEXPIRE key milliseconds 其中,key表示需要设置过期时间的key的名称,milliseconds表示与现在时间…

    Redis 2023年3月27日
    00
  • logstash 1.5.3 配置使用redis做续传

    logstash是ELK中的一员大将, redis插件也是《The Logstash Book》中介绍的一个很好用的玩意儿。 之前,用比较小的集群部署的时候,没有介入redis中间件,所以也不是很清楚里面的配置, 后来用起来才发现配置有点坑。 第一次配置的时候,死活就是连接不起来,总是报错,说connection refused. 但在logstash机器r…

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