*Redis FUNCTION RESTORE 命令
FUNCTION RESTORE 用于从二进制数据(FUNCTION DUMP 的输出)恢复函数库。
*语法
FUNCTION RESTORE <payload> [FLUSH | APPEND]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| payload | String | 是 | FUNCTION DUMP 生成的二进制数据 |
| FLUSH | Flag | 否 | 恢复前清空现有函数库 |
| APPEND | Flag | 否 | 将恢复的函数追加到现有库(默认行为) |
*返回值
- OK:恢复成功
- Error:数据损坏、库名冲突等
*时间复杂度
O(N),其中 N 是恢复数据的大小
*示例
*基本用法(追加模式)
> FUNCTION DUMP
"\x04\x01\x00\x00..."
> FUNCTION RESTORE "\x04\x01\x00\x00..."
OK
*先清空再恢复
> FUNCTION RESTORE "\x04\x01\x00\x00..." FLUSH
OK
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR payload failed check | 数据损坏或不兼容 | 确认 DUMP 数据完整且版本兼容 |
| ERR Library 'mylib' already exists | 库名冲突(未带 FLUSH) | 使用 FLUSH 或先删除冲突库 |
*最佳实践
- 场景:函数库迁移、灾难恢复、多实例同步
- 建议定期使用 FUNCTION DUMP 备份,并通过 RESTORE 恢复
- 跨实例迁移时建议先 FLUSH 目标实例,避免库名冲突
- 注意:恢复的数据会覆盖或追加,取决于使用的选项
*FAQ
Q1: FUNCTION RESTORE 和 FUNCTION LOAD 有什么区别? A: FUNCTION RESTORE 从二进制 DUMP 恢复,保留原始状态和元数据;FUNCTION LOAD 从 Lua 源代码加载,需要重新编译。
Q2: 可以部分恢复某个函数吗? A: 不可以。FUNCTION DUMP 和 RESTORE 是针对整个函数库的操作,无法单独恢复某个函数。
Q3: 恢复的数据版本不兼容怎么办? A: 建议在同版本或兼容版本之间操作。如果版本差异大,可能需要导出 Lua 源代码重新加载。