RedisSyncer 的断点续传机制是基于 Redis 的 replid 和 offset 来实现的,RedisSyncer 有两个版本的断点续传机制 v1 和 v2。
v1 版本:
v1 版本数据写入到目的端 redis 后,将 offset 持久化到本地,这样下次重启就从上次的 offset 拉取。但是由于该方案写目的端的操作和 offset 持久化不是一个原子的操作。如果中间发生中断会导致数据的不一致。 例如,先写入数据到目的端成功,后持久化 offset 还没成功就发生了宕机、重启等情况,那么再次断点续传拉取上一次的 offset 数据最后就不一致了。
v2 版本:
在 v2 版本策略中 RedisSyncer 会将每一个 pipeline 批次中不存在事务的的命令通过 multi 和 exec 进行包装,并在事务尾部插入 offset 检查点。 当断点续传时需要从目标 Redis 的所以 db 库中查找 checkpoint 并找到所对应源节点当最大 offset,再根据该 offset 进行断点续传。目前 v2 版本只支持目标为单机 Redis 的情况。 在 v2 版本中
v2 命令事务封装结构