*FUNCTION LOAD 命令
加载 Redis 函数库(library)。函数加载后会持久化到 AOF/RDB,重启后自动恢复。Redis 7.0+ 引入。
*语法
FUNCTION LOAD [REPLACE] library-code
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| REPLACE | 标志 | 否 | 如果同名库已存在则替换 |
| library-code | String | 是 | Lua 函数库代码 |
*返回值
| 条件 | 返回值 |
|---|---|
| 加载成功 | 库名称(String) |
| 库已存在且无 REPLACE | 错误 |
*时间复杂度
取决于库代码大小。
*示例
# 加载函数库
> FUNCTION LOAD "#!lua name=mylib\nredis.register_function('my_incr', function(keys, args)\n local key = keys[1]\n local increment = tonumber(args[1])\n return redis.call('INCRBY', key, increment)\nend)\nredis.register_function('my_decr', function(keys, args)\n local key = keys[1]\n local decrement = tonumber(args[1])\n return redis.call('DECRBY', key, decrement)\nend)"
"mylib"
# 替换已有库
> FUNCTION LOAD REPLACE "#!lua name=mylib\n..."
"mylib"
*最佳实践
- 函数库版本管理:加载新版本的函数库时用 REPLACE 替换旧版本。
- 函数持久化:函数库通过 AOF/RDB 持久化,重启后自动恢复,无需应用层重新加载。
*FAQ
Q: FUNCTION LOAD 和 SCRIPT LOAD 有什么区别? A: FUNCTION LOAD 加载持久化的函数库(可含多个函数);SCRIPT LOAD 缓存单个 Lua 脚本的 SHA。函数库重启后自动恢复,SCRIPT 缓存会丢失。
Q: 函数库可以包含多个函数吗?
A: 可以。一个库(library)可注册多个函数,用 redis.register_function(name, func) 注册。