mgtv-tech / redis-GunYu

Apache License 2.0
220 stars 31 forks source link

关于断点续传机制 #48

Closed lipengfei333 closed 3 months ago

lipengfei333 commented 3 months ago

想详细了解下断点续传的机制,应该是有同步点位记录的吧,这个下次启动从哪里开始同步的信息是在哪里记录的呢?

我测试的时候开启了断点续传,全量同步完以后,停掉GunYu,同时删掉了channel下存储目录的所有文件,再次启动GunYu后直接是增量同步了,看样子同步的位置信息不是在本地,在源redis存储吗?

这个同步点位的存储时间是多久?GunYu宕机以后,停多久会对再次启动时的断点续传有影响。比如GunYu宕机5天才发现,断点续传还能使用吗?会不会丢失数据,或者导致同步后数据不一致。

ikenchina commented 3 months ago

可以看这篇文章:https://mp.weixin.qq.com/s/Sm5pM9iy9YN9S8vBQhRvlw

这个是存储到目的端redis里的。断点续传能不能用,取决于源端redis的同步buffer多大。 是不会丢失数据的。

ikenchina commented 3 months ago

微信图片_20240722091951 可以加微信群聊

steedyu commented 1 month ago

可以看这篇文章:https://mp.weixin.qq.com/s/Sm5pM9iy9YN9S8vBQhRvlw

阅读了这篇文章,文中提到的

如何进行回放

对于RDB数据的回放,我们会优先尝试使用restore命令进行回放,这样可以确保较好地性能,restore回放失败再尝试拆分成redis命令地形式进行回放。 但有些情况例外,需要将数据结构拆分成命令形式进行回放,如 某些特殊数据结构,如FUNCTION 源和目标redis版本不一致,对于某些数据结构不兼容 数据结构太大

目前只是看到源码中,restore命令如果失败,则使用restore xxx replace的方式再次执行一次,没有看到对命令拆分成redis命令进行回放,目前版本是否是通过restore replace的命令进行简单处理的

lipengfei333 commented 1 month ago

您好,您发的邮件我已收到。

ikenchina commented 1 month ago

*目前只是看到源码中,restore命令如果失败,则使用restore xxx replace的方式再次执行一次,没有看到对命令拆分成redis命令进行回放

可以看rdb_object.go这个文件,所有ExecCmd这个接口,都是进行命令行回放,具体回放条件要看前面代码判断