DUMP / RESTORE 是什么
DUMP 把键导出成一段二进制安全的序列化值(含校验与版本字节),RESTORE 把它写回目标键,可在同一实例或不同实例间搬键。RESTORE 的第二个参数是毫秒级 TTL,0 表示永不过期,因此搬运后能保留原有过期时间。跨版本搬运时要注意序列化格式与 RDB 版本绑定,跨大版本可能校验不通过。
基本信息
| 适用版本 | RESTORE 的 REPLACE 选项需 3.0+;序列化格式随版本演进 |
|---|---|
| DUMP | 返回序列化值,二进制安全,含版本与校验和 |
| RESTORE | RESTORE key ttl serialized-value [REPLACE] [ABSTTL] [IDLETIME n] |
| TTL 单位 | 毫秒;0 表示不过期 |
| REPLACE | 目标键已存在时覆盖,否则报 BUSYKEY |
| 替代工具 | MIGRATE 可直接跨实例搬键,避免传输序列化串 |
典型使用场景
- 单键搬迁:把某个键从旧实例复制到新实例
- 数据修复:用备份里的序列化串恢复被误改的键
- 灰度验证:把线上键复制到测试实例做问题复现
- 结构迁移:配合 MIGRATE 在迁移窗口内搬移热点键
- 精确复制:只搬少量键时不必重启或全量同步
示例
示例
SET src hello
DUMP src # 输出序列化值(二进制安全,勿经文本工具处理)
# 同一实例内搬运:序列化串原样回填,ttl 用毫秒
RESTORE dst 0 "\x00\x05hello\t\x00..."
RESTORE dst2 3600000 "\x00\x05hello\t\x00..." # 保留 1 小时过期
# 跨实例搬运:在源实例执行 MIGRATE,可加 COPY 保留源键
MIGRATE 10.0.0.9 6379 user:1 0 5000 REPLACE
MIGRATE 10.0.0.9 6379 user:2 0 5000 COPY参数与行为
| 参数 | 作用 | 注意 |
|---|---|---|
| ttl | 过期时间,毫秒 | 0 表示永不过期,容易漏填导致键永不过期 |
| REPLACE | 目标存在时覆盖 | 不加则报 BUSYKEY,脚本会中断 |
| ABSTTL | ttl 视为绝对时间戳(毫秒) | 跨机器时钟不一致时慎用 |
| IDLETIME / FREQ | 设置空闲时间或访问频次 | 用于迁移后保持淘汰策略判断 |
| COPY(MIGRATE) | 搬迁后保留源键 | 不加则源键被删除 |
大批量搬运优先用 MIGRATE 或专门的迁移工具:DUMP 的序列化串在脚本、日志、终端间传递时容易被转义或截断,而 MIGRATE 在服务端直接完成传输,不需要把二进制串带出实例。
序列化格式与 RDB 版本绑定:跨大版本搬运可能因校验或内部编码差异失败,正式迁移前先在预发验证;版本差异较大时应改用 RDB 文件迁移或重放业务数据的方式。