5条curl命令搞定Redis同步:RedisSyncer创建、启动、停止与查询任务实战
【免费下载链接】redissyncer-serverRedisSyncer是一个多任务的redis数据同步工具,可灵活的满足Redis间的数据同步、迁移需求; redissyncer is a redis synchronization tool, used in redis single instance and cluster synchronization项目地址: https://gitcode.com/gh_mirrors/re/redissyncer-server
RedisSyncer 是一个开源的多任务 Redis 数据同步工具,支持单实例与集群之间的数据同步和迁移。本文带你用 5 条 curl 命令走通 RedisSyncer 的任务创建、启动、查询、停止与删除全流程,10 分钟上手。
上图展示了 RedisSyncer 的核心架构:replicator负责从源 Redis 拉取数据(存量 RDB + 增量命令),transmission负责将数据写入目标 Redis,用户则通过底部的Restful API(也就是本文主角 curl 命令)来管理同步任务。
在分布式部署模式下,RedisSyncer 还包含 portal(任务调度)、server(执行同步任务)和 etcd(注册与健康上报)三类组件,支持多节点水平扩展。
一、准备工作:1分钟启动RedisSyncer服务
在执行 curl 命令前,先启动服务端。两种方式任选其一(详见 docs/quickstart.md):
方式1:jar 包启动
mvn clean package -Ddockerfile.skip java -jar syncer-webapp/syncer-webapp.jar方式2:Docker 启动
docker run -idt -m 2G -p 8000:80 --name redissyncer redissyncer:v2.0.8服务默认监听8080端口(Docker 示例映射为 8000)。假设 RedisSyncer 部署在10.0.0.100:8080,源 Redis 为192.168.0.10:6379,目标 Redis 为192.168.1.10:6379。
二、命令1:创建同步任务(creattask)
这是最核心的一条命令,通过POST /api/v2/creattask描述"从哪个 Redis 同步到哪个 Redis":
curl -X POST \ http://10.0.0.100:8080/api/v2/creattask \ -H 'Content-Type: application/json' \ -d '{ "sourcePassword": "xxxxxx", "sourceRedisType": "SINGLE", "sourceRedisAddress": "192.168.0.10:6379", "targetRedisAddress": "192.168.1.10:6379", "targetRedisType": "SINGLE", "targetPassword": "xxxxxx", "targetRedisVersion": 4, "taskName": "firsttest" }'成功返回:
{ "msg": "Task created successfully", "code": "2000", "data": { "taskids": ["10F7B3A0E5344598BAA9F847ADBFF9D6"] } }💡 记住返回的
taskid,它是任务唯一 ID,后续启动、停止、删除都要用它。当源库为集群时,任务会按集群节点数拆分成多个任务,每个任务一个 id。
常用可选参数速查
| 字段 | 示例 | 说明 |
|---|---|---|
tasktype | "incrementonly" | 任务类型:stockonly仅存量 /incrementonly仅增量 /total存量+增量(默认) |
dbMapper | {"1": "1"} | 源→目标 db 映射关系,未列出的 db 不同步 |
filterType | "KEY_FILTER_ACCEPT" | key/命令过滤类型,支持正则 |
autostart | true | 创建后自动启动,可省去第二条命令 |
集群地址用;分割,如"192.168.1.10:16379;192.168.1.10:16380"。完整的字段说明可参考 docs/3.3/createtask.md,文件类任务(AOF/RDB 文件同步)则参考 docs/3.3/createfiletask.md。
三、命令2:启动同步任务(starttask)
启动接口每次只支持单任务启动:
curl -X POST \ http://10.0.0.100:8080/api/v2/starttask \ -H 'Content-Type: application/json' \ -d '{ "taskid": "10F7B3A0E5344598BAA9F847ADBFF9D6", "afresh": false }'其中afresh控制断点续传:设为false时从上次中断的 offset 继续;前提是任务之前已进入增量同步阶段且 offset 已记录,否则启动会失败。返回code: 2000即启动成功。
四、命令3:查询任务状态(listtasks)
同步中随时可以查看任务进度,支持按名称、ID、状态查询,也支持分页:
# 按任务名查询 curl -X POST \ http://10.0.0.100:8080/api/v2/listtasks \ -H 'Content-Type: application/json' \ -d '{ "regulation": "bynames", "tasknames": ["firsttest"] }'regulation取值:all(全部)、bynames、byids、bystatus。分页查询用/api/v2/listtasksByPage,追加currentPage与pageSize即可。常见任务状态含义:
| 状态 | 含义 |
|---|---|
CREATING/CREATED | 创建中 / 创建完成 |
STARTING | 启动中 |
RDBRUNING | 存量 RDB 数据同步中 |
COMMANDRUNING | 增量命令实时同步中 |
FINISH | 任务完成 |
BROKEN | 任务异常 |
五、命令4:停止同步任务(stoptask)
停止接口支持批量停止,taskids传数组即可:
curl -X POST \ http://10.0.0.100:8080/api/v2/stoptask \ -H 'Content-Type: application/json' \ -d '{ "taskids": ["10F7B3A0E5344598BAA9F847ADBFF9D6"] }'返回code: 2000表示停止成功。若任务已停止,再次调用会提示"请先停止处于运行状态的任务"。
六、命令5:删除任务(removetask)
清理不再需要的非运行态任务:
curl -X POST \ http://10.0.0.100:8080/api/v2/removetask \ -H 'Content-Type: application/json' \ -d '{ "taskids": ["10F7B3A0E5344598BAA9F847ADBFF9D6"] }'⚠️ 运行中的任务不能直接删除,必须先执行 stoptask 停止后再删除。
七、可视化面板:任务列表一目了然
除了 curl,RedisSyncer 还自带 Web 管理面板,创建、启动、停止、删除任务都可以在界面上点选完成,任务状态、同步进度一目了然:
八、实战避坑清单 📝
- 主从源只填一个节点:源端为主从架构时,只填主节点地址,填多个会导致数据同步两份。
- 留足内存与带宽:同步前确认源机器内存足够生成至少一个 RDB 文件;建议 RedisSyncer 部署在独立空闲机器上。
- 调大 slave 缓冲区:注意
client-output-buffer-limit的 slave 项,buffer size 与超时时间要设置足够大,防止 RDB 传输被断开。 - 多观察日志:迁移中和业务切换前,反复查看日志(位置
~/log)确认无异常,并充分核对数据一致性。 - 状态码含义:
2000成功、4007任务不存在或已在运行、4020不存在指定任务 id、400JSON 格式错误。
以上 5 条 curl 命令覆盖了 RedisSyncer 任务管理的完整生命周期。更多 API 参数细节可查阅 docs/api.md,典型场景案例可参考 docs/scenecases.md。
【免费下载链接】redissyncer-serverRedisSyncer是一个多任务的redis数据同步工具,可灵活的满足Redis间的数据同步、迁移需求; redissyncer is a redis synchronization tool, used in redis single instance and cluster synchronization项目地址: https://gitcode.com/gh_mirrors/re/redissyncer-server
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考