RedisShake
RedisShake copied to clipboard
feat: Support increment sync
for issue #722
通过sync_reader同步时,支持增量同步,避免每次都进行不必要的全量同步 以允许在shake短暂中断或重启后,可以从上次同步的offset处继续进行
- 在连接源redis实例时,通过
info replication
命令获取master_replid
字段 - 修改保存aof的文件名,以接收到的起始offset作为文件名。在重启时可通过
文件名 + 文件大小
的方式得到上次同步的offset - 若能拿到上次同步的offset 且
sync_rdb=false
,尝试进行增量同步,替换PSYNC ? -1
这里我考虑的一点是将文件名作为 aof offset 的存放位置好像不太合适,我们这里需要一个 metadata 的抽象 @suxb201 WYDT
@Zheaoli 是的,现在的 aof file 是我之前随便写的,看 issue 反馈来看貌似有 bug,但我没能复现出来。之前也考虑换个成熟的 disk queue,但是没发现好用的库。
@Zheaoli 在这个pr中,原本也实现过在reader目录下增加一个保存元数据的文件。但后面考虑仅就增量同步这个功能,目前需要保存的信息只有repl_id
和repl_offset
,想着repl_id
可以添加到目录上作为区分(目前目录上仅ip和端口作为区分应该不保险);repl_offset
记录在aof文件名上(目前aof文件名仅是一个递增的序号,应该没有具体含义?),这种实现有点类似kafka记录msg的方式base_offset + size 能定位到具体某条消息