*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"

*最佳实践

  1. 函数库版本管理:加载新版本的函数库时用 REPLACE 替换旧版本。
  2. 函数持久化:函数库通过 AOF/RDB 持久化,重启后自动恢复,无需应用层重新加载。

*FAQ

Q: FUNCTION LOAD 和 SCRIPT LOAD 有什么区别? A: FUNCTION LOAD 加载持久化的函数库(可含多个函数);SCRIPT LOAD 缓存单个 Lua 脚本的 SHA。函数库重启后自动恢复,SCRIPT 缓存会丢失。

Q: 函数库可以包含多个函数吗? A: 可以。一个库(library)可注册多个函数,用 redis.register_function(name, func) 注册。