函数加载
Syntax
FUNCTION LOAD [REPLACE] function-code
- Available since:
- 7.0.0
- Time complexity:
- O(1) (considering compilation time is redundant)
- ACL categories:
-
@write
,@slow
,@scripting
,
加载一个库到Redis。
该命令获取一个必需的参数,即实现库的源代码。
库的有效负载必须以Shebang语句开头,该语句提供有关库的元数据(如使用的引擎和库名称)。
Shebang格式:#!
。目前引擎名称必须为lua
。
对于Lua引擎,实现应使用redis.register_function()
API声明库的一个或多个入口点。
加载后,您可以使用FCALL
(或在适用时使用FCALL_RO
)命令调用库中的函数。
当尝试加载一个名称已经存在的库时,Redis服务器会返回一个错误。
REPLACE
修饰符改变了这种行为,并用新内容覆盖现有的库。
该命令在以下情况下将返回错误:
- 提供了一个无效的engine-name。
- 库的名称已经存在,没有使用
REPLACE
修饰符。 - 库中的函数创建时使用了另一个库中已存在的名称(即使指定了
REPLACE
)。 - 引擎在创建库函数时失败(例如,由于编译错误)。
- 库没有声明任何函数。
更多信息请参考Introduction to Redis Functions。
示例
以下示例将创建一个名为 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"