函数加载

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格式:#! name=。目前引擎名称必须为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"

RESP2/RESP3 回复

Bulk string reply: the library name that was loaded.
RATE THIS PAGE
Back to top ↑