Redis两个缓冲区

Redis采用异步复制实现数据主从备份,关键在于ReplicationBuffer和ReplBacklogBuffer这两个缓冲区。ReplicationBuffer在主服务器中存储写命令,当缓冲区满时会暂停写操作。ReplBacklogBuffer在从服务器中保存主服务器的写命令和同步信息,允许从上次断点继续复制。合理配置这两个缓冲区对保障数据同步和服务器性能至关重要。
摘要由CSDN通过智能技术生成

Redis 是一种基于内存的键值存储数据库,它采用异步复制(Asynchronous Replication)来实现数据的主从备份和数据的高可用性,主要通过两个缓冲区来实现复制功能,即 Replication Buffer 和 Repl Backlog Buffer。

  1. Replication Buffer

Replication Buffer 是 Redis 主服务器中的一个缓冲区,主要用于保存写命令请求,它以固定大小的循环数组的形式存储,当数组被写满之后,新写入的元素会从数组头部覆盖老数据。当主服务器接收到一个写命令请求时,就会将该命令序列化成 RDB 格式或 AOF 格式,并存放到 Replication Buffer 中,等待复制给从服务器。

在实际使用中,如果主服务器执行写入命令的速度大于从服务器复制命令的速度,那么 Replication Buffer 就会被耗尽,这时主服务器会停止处理写入命令请求,直到有新的空间可用。因此,在进行大量写入操作时,需要注意调整 Replication Buffer 的大小以及增加从服务器数量等设置。

     2.Repl Backlog Buffer

Repl Backlog Buffer 是 Redis 从服务器中的一个缓冲区,用于保存主服务器发送的写命令请求,以及从服务器复制命令时需要的信息,例如 offset(偏移量) 和 replication ID(复制 ID)等。与 Replication Buffer 不同,Repl Backlog Buffer 的大小是固定的,并且不会被覆盖。

当从服务器进行复制时,它会向主服务器发送一个 PSYNC 命令,主服务器根据复制 ID 和 offset 等信息来确定从服务器的数据同步情况,并将未同步的数据发送给从服务器。主服务器通过 Repl Backlog Buffer 来保存已发送但尚未同步的数据,从而保证从服务器可以正确复制数据,并且可以从上一次同步失败的地方继续复制。

需要注意的是,Repl Backlog Buffer 中保存的数据是不会过期的,这可能会导致内存占用的增加和主从同步时的延迟,因此在使用 Redis 时需要定期清理 Repl Backlog Buffer 中的数据,以免占用过多的内存空间。

综上所述,Replication Buffer 和 Repl Backlog Buffer 都是 Redis 复制功能中非常重要的部分,通过这两个缓冲区的配合,Redis 实现了数据的主从备份和高可用性。在配置 Redis 时,需要合理地调整这些参数的大小和相关设置,以确保 Redis 服务器的正常运行。

   网络断开又恢复后,从主从服务器会采用增量复制的方式继续同步,也就是只会把网络断开期间主服务器接收到的写操作命令,同步给从服务器。

主从复制中两个 Buffer(replication buffer 、repl backlog buffer)有什么区别?

replication buffer 、repl backlog buffer 区别如下:

  • 出现的阶段不一样:
    • repl backlog buffer 是在增量复制阶段出现,一个主节点只分配一个 repl backlog buffer
    • replication buffer 是在全量复制阶段和增量复制阶段都会出现,主节点会给每个新连接的从节点,分配一个 replication buffer
  • 这两个 Buffer 都有大小限制的,当缓冲区满了之后,发生的事情不一样:
    • 当 repl backlog buffer 满了,因为是环形结构,会直接覆盖起始位置数据;
    • 当 replication buffer 满了,会导致连接断开,删除缓存,从节点重新连接,重新开始全量复制
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值