*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
*常见错误
- BUSYKEY:key 已存在且未指定 REPLACE。
- 序列化数据损坏:DUMP 的数据被修改或不完整,RESTORE 报错。
*最佳实践
*FAQ
Q: DUMP + RESTORE 和 MIGRATE 有什么区别? A: MIGRATE 是网络迁移(原子地从源到目标);DUMP + RESTORE 是本地操作,可以中间保存或修改数据。
Q: RESTORE 的数据必须是同一 Redis 版本吗? A: 不一定。Redis 保证向后兼容,但跨大版本可能有兼容性问题。