FUNCTION LOAD
语法
FUNCTION LOAD [REPLACE] function-code
- 可用版本
- Redis 开源版 7.0.0
- 时间复杂度
- O(1)(忽略编译时间)
- ACL 类别
-
@write
,@slow
,@scripting
,
加载库到 Redis。
该命令接受一个强制参数,即实现该库的源代码。库有效载荷必须以 Shebang 语句开头,该语句提供有关库的元数据(如使用的引擎和库名称)。Shebang 格式:#!<engine name> name=<library name>
。目前,引擎名称必须是 lua
。
对于 Lua 引擎,实现应该使用 redis.register_function()
API 声明库的一个或多个入口点。加载后,您可以使用 FCALL
命令(或在适用时使用 FCALL_RO
命令)调用库中的函数。
尝试加载已存在名称的库时,Redis 服务器会返回错误。REPLACE
修饰符会改变此行为,并用新内容覆盖现有库。
在以下情况下,该命令将返回错误:
- 提供了无效的 引擎名称。
- 库名称已存在,且未使用
REPLACE
修饰符。 - 库中创建的函数名称在另一个库中已存在(即使指定了
REPLACE
)。 - 引擎在创建库函数时失败(例如由于编译错误)。
- 库未声明任何函数。
更多信息请参考 Redis 函数简介。
示例
以下示例将创建一个名为 mylib
的库,其中包含一个函数 myfunc
,该函数返回它接收的第一个参数。
redis> FUNCTION LOAD "#!lua name=mylib \n redis.register_function('myfunc', function(keys, args) return args[1] end)"
mylib
redis> FCALL myfunc 0 hello
"hello"