*Redis RESTORE 命令

将 DUMP 序列化的二进制数据还原为 key。可设置 TTL 和覆盖选项。


*语法

RESTORE key ttl serialized-value [REPLACE] [ABSTTL] [IDLETIME seconds] [FREQ frequency]

*参数说明

参数 类型 必填 说明
key String 新键名
ttl Integer 过期时间(毫秒),0 表示永不过期
serialized-value String DUMP 返回的二进制数据
REPLACE 标志 key 已存在时覆盖
ABSTTL 标志 ttl 是绝对 Unix 时间戳(毫秒)
IDLETIME Integer 设置对象空闲时间(LRU)
FREQ Integer 设置对象访问频率(LFU)

*返回值

条件 返回值
还原成功 OK
key 已存在且无 REPLACE 错误 BUSYKEY
数据格式错误 错误

*时间复杂度

O(1),实际取决于 key 大小。


*示例

# DUMP + RESTORE 复制 key
> SET mykey "hello"
OK
> DUMP mykey
"\x00\x05hello\x06\x00\x8f\x8e\x8d\x8c"

> RESTORE newkey 0 "\x00\x05hello\x06\x00\x8f\x8e\x8d\x8c"
OK

> GET newkey
"hello"

# 带 TTL
> RESTORE newkey2 60000 "\x00\x05hello\x06\x00\x8f\x8e\x8d\x8c"
OK
> PTTL newkey2
(integer) 59999

# 覆盖已有 key
> SET newkey "old"
> RESTORE newkey 0 "\x00\x05hello\x06\x00\x8f\x8e\x8d\x8c" REPLACE
OK

*常见错误

  1. BUSYKEY:key 已存在且未指定 REPLACE。
  2. 序列化数据损坏:DUMP 的数据被修改或不完整,RESTORE 报错。

*最佳实践

  1. 跨实例 key 复制DUMP + RESTORE 实现 key 级别的跨实例复制,比 RDB 更精细。
  2. 数据修复:将备份的 DUMP 数据 RESTORE 到测试环境验证。

*FAQ

Q: DUMP + RESTORE 和 MIGRATE 有什么区别? A: MIGRATE 是网络迁移(原子地从源到目标);DUMP + RESTORE 是本地操作,可以中间保存或修改数据。

Q: RESTORE 的数据必须是同一 Redis 版本吗? A: 不一定。Redis 保证向后兼容,但跨大版本可能有兼容性问题。