*Redis FUNCTION LOAD 命令

FUNCTION LOAD 用于将函数库加载到 Redis 中。


*语法

FUNCTION LOAD [REPLACE] <payload>

*参数说明

参数 类型 必填 说明
REPLACE Flag 如果库已存在则替换
payload String 函数库的 Lua 代码

*返回值

  • Bulk String:加载的库名称
  • Error:语法错误、库已存在(未带 REPLACE)等

*时间复杂度

O(N),其中 N 是函数库代码的大小


*示例

*基本用法

> FUNCTION LOAD "#!lua name=mylib\nredis.register_function('myfunc', function(keys, args) return 'hello' end)"
mylib

*替换已有库

> FUNCTION LOAD "#!lua name=mylib\nredis.register_function('myfunc', function(keys, args) return 'hello' end)"
mylib
> FUNCTION LOAD REPLACE "#!lua name=mylib\nredis.register_function('myfunc', function(keys, args) return 'world' end)"
mylib

*常见错误

错误 原因 解决
ERR Library 'mylib' already exists 库已存在且未带 REPLACE 添加 REPLACE 选项或先删除旧库
ERR Error compiling script Lua 语法错误 检查代码语法
ERR Function already exists 函数名已存在 使用不同的函数名或 REPLACE

*最佳实践

  • 场景:部署函数库、更新函数逻辑、扩展 Redis 功能
  • 建议将函数代码存储在版本控制系统中
  • 生产环境更新时建议先使用 REPLACE 测试,再切换流量
  • 注意:函数库名称必须唯一,函数名在库内也必须唯一

*FAQ

Q1: FUNCTION LOAD 和 EVAL 有什么区别? A: FUNCTION LOAD 加载持久化的函数库,函数可以重复调用;EVAL 是临时执行 Lua 脚本,不会持久化。

Q2: 加载的函数在重启后还在吗? A: 在。Redis Functions 会持久化到 RDB 和 AOF 中,重启后自动恢复。

Q3: 可以加载多个函数库吗? A: 可以,只要库名不同。每个库可以包含多个函数。