使用 RedisShake 迁移 Redis
先证明命令与重放语义兼容,再扩大同步范围
RedisShake 是面向 Redis 数据迁移和同步的开源工具,提供 Sync、Scan、RDB Reader 与 Redis Writer 等组件。它不是“任意 Redis 兼容产品之间无损复制”的保证,迁移前仍要检查版本、命令、模块、拓扑和目标限制。RedisShake 官方文档
- 网络可达的 Redis 到 Redis 全量或持续同步
- 从 RDB 文件读取并写入目标 Redis
- 需要受控过滤、Key 前缀处理或数据加工的试迁
- 厂商迁移服务不支持,但团队能够自行运行和监控同步链路的场景
不适合未验证的降级迁移、目标不支持源命令或模块、凭据无法安全托管、没有一致性验证和回滚负责人的项目。
- 从官方 Release 获取固定版本,记录文件哈希和构建来源,不直接运行来源不明的二进制。
- 在专用迁移主机运行,限制网络出口、文件访问和进程权限。
- 配置文件权限至少限制为迁移用户可读;不要把真实地址、用户名、密码或 TLS 私钥提交到仓库。
- 源端使用最小权限 ACL 用户,目标端限制为专用空库或明确的 Key 范围。
- 迁移完成后删除临时白名单、轮换凭据并清理含敏感信息的日志与配置副本。
官方快速上手提醒不要在同一目录运行两个 RedisShake 进程,避免临时文件互相覆盖;也明确不建议把高版本数据降级迁移到低版本。快速上手
- 建立专用工作目录,并把配置与日志放在受控路径。
- 只选择一个非关键 DB、Key 前缀或脱敏数据集验证 Reader 与 Writer。
- 覆盖 String、Hash、List、Set、Sorted Set、TTL、Lua、事务、Stream 和模块数据。
- 记录跳过命令、错误命令、过滤数量、重试、吞吐和目标端内存变化。
- 在可丢弃目标上主动中断进程,验证清理目标并重新全量的耗时和操作步骤。
RedisShake 4.x 不支持断点续传,也不感知集群拓扑变化。网络中断、进程崩溃、主从切换或扩缩容都可能要求从头执行全量同步,因此它适合一次性迁移,不适合作为长期高可用同步链路。断点续传限制
RedisShake 的配置结构和字段会随版本变化,应从所用 Release 对应文档生成 shake.toml,不要复制互联网旧配置。官方文档提供 Sync Reader、RDB Reader和Redis Writer说明。
- 源目标版本和命令兼容矩阵已完成
- 目标库为空且没有业务写入
- 网络、TLS、ACL 与配置文件权限已审查
- 全量对源端 CPU、fork、网络和延迟的影响已压测
- 复制 backlog、最长故障窗口,以及中断后清理目标并重新全量的时间已验证
- 过滤和 Key 改写规则已做反例测试
- 停写、追平、校验、客户端切换和回滚已演练
不要只比较总 Key 数。至少比较:每个 DB/分片的 Key 数、数据类型、TTL 分布、核心值抽样、过期行为、大 Key、热 Key、槽位和业务查询。工具官方文档说明过期 Key 会让源目标 Key 数自然不同,核心业务数据仍需独立对账。一致性验证
- 发现未知命令或模块数据时暂停,不用“跳过错误”掩盖数据缺口。
- 目标限流或内存不足时先降低并发并保留检查点,不反复从头灌入非空目标。
- 同步中断后不要假设可以续传;保留日志,确认目标清理范围,并按已演练步骤重新全量。
- List、计数器、锁、队列等非幂等数据出现重放疑点时,停止业务切换并做专项对账。
- 任何重新初始化任务都先清理或重建目标,不能在未知状态上重复全量。
核验日期:2026-07-14。正式使用前以版本兼容性、模块支持和所用 Release 文档为准。
Built with