Redis FUNCTION LOAD 怎样部署函数库
Redis FUNCTION LOAD 接收完整的 Lua 函数库源码;源码第一行声明引擎和库名,通过 redis.register_function 注册可调用函数。首次加载用 FUNCTION LOAD,更新同名库用 FUNCTION LOAD REPLACE,业务调用使用 FCALL 加函数名。下面用一个不访问数据键的版本标识函数演示部署,便于把加载问题和数据操作问题分开。
官方地址:https://redis.io/
准备独立的 Lua 函数库文件
示例适用于支持 Redis Functions 的 Redis 7.0 及以上服务。把下面内容保存为 deploy_catalog.lua,首行前不要插入空行或文件标记。这里的 deploy_catalog 是库名,catalog_release 是对外函数名,返回的 release-a 是这个示例自行约定的版本标识。
#!lua name=deploy_catalog
-- 仅提供版本标识,部署演示不读取或修改任何业务键。
local function release_label(keys, args)
-- 拒绝多余参数,避免调用方把它误当成数据处理函数。
if #keys ~= 0 or #args ~= 0 then
return redis.error_reply('catalog_release expects no inputs')
end
return 'release-a'
end
-- 客户端使用注册名调用,Lua 局部函数名不作为外部入口。
redis.register_function('catalog_release', release_label)
文件既是首次安装的输入,也应作为可追溯的部署产物保存。不要只在命令行历史里留一份源码;回滚时还需要旧文件。真正访问数据的函数必须把所用键名显式作为 key 参数传入,不能把任意键名藏在普通参数中。
加载函数库并按函数名调用
以下命令使用本机独立演示服务,实际部署应替换连接配置。redis-cli 的 -x 将标准输入作为命令的最后一个参数,所以重定向的是整个 Lua 文件,不需要把多行代码拼进字符串。
# 首次加载:整个文件作为 function-code 参数发送给演示服务。 redis-cli -h 127.0.0.1 -p 6379 -x FUNCTION LOAD
首次加载成功时,命令返回库名 deploy_catalog。按上述源码调用时,函数应返回 release-a;这是示例的预期行为,不是本机执行记录。FUNCTION LIST 的列表结构与客户端显示形式有关,重点看库名及其注册的函数名称。

区分库名、函数名和更新范围
FUNCTION LOAD REPLACE 的替换单位是同名的整个函数库。它不会给函数名自动加上库名前缀,也不是只修改某一个注册函数。若新版文件漏掉旧函数,依赖旧入口的客户端可能失去可调用入口,因此发布文件应包含该库打算保留的完整函数集合。
| 对象 | 本例名称 | 用途 |
|---|---|---|
| 源码文件 | deploy_catalog.lua | 部署工具读取的本地文件 |
| 函数库 | deploy_catalog | LOAD REPLACE、LIST 和 DELETE 的管理对象 |
| 注册函数 | catalog_release | FCALL 的调用对象,名称不能与其他库的函数冲突 |
| 版本标识 | release-a | 示例自定义返回值,不是 Redis 自动维护的版本号 |
例如把文件中的标识改为 release-b,并保留注册名与参数约定,再执行下面的更新命令。REPLACE 允许同名库替换,但不能抢占另一个库已经注册的同名函数。
# 更新前由部署系统保留上一版完整文件;这里加载已准备好的新版。 redis-cli -h 127.0.0.1 -p 6379 -x FUNCTION LOAD REPLACE
安排主节点分发与故障处理
一个节点的加载成功回执,只说明该节点接受了函数库。Redis 会把函数库传播给副本;Redis Cluster 中不同主节点的部署仍需要管理员安排,不能把连接任意一个主节点并加载一次当成全体分片完成。建议由部署系统维护目标主节点清单,逐个发送同一份发布文件并记录各节点回执。
对集群的更新不是跨主节点的一次全局原子切换。如果发布过程中部分节点失败,应暂停依赖新行为的客户端切换,按记录修复缺失节点或让已更新节点回到旧版。只有当新旧接口兼容时,逐节点过渡才容易控制。需要新增不兼容入口时,可采用独立注册名保留旧接口,完成客户端迁移后再清理。

加载报错时先读服务端错误:同名库已经存在且未带 REPLACE,应明确是首次安装冲突还是预期更新;其他库已有同名函数,应调整完整命名方案;引擎声明、Lua 编译或函数注册失败,应修复同一份源码。不要通过先清空所有函数库来掩盖单个库的安装问题。
保留回滚文件并定向清理
发布仓库应保存库名、源码版本、函数入口集合、目标节点与部署结果。回滚是把旧版完整源码重新加载到相同目标节点,它不会自动撤销函数以前对业务数据产生的修改。本例没有数据写入,业务函数则必须另行考虑数据兼容性。
# 恢复预先归档的旧版源码;不要把空文件当回滚文件。 redis-cli -h 127.0.0.1 -p 6379 -x FUNCTION LOAD REPLACE
库删除后,其中注册的函数不再可供调用。集群部署和清理要覆盖相应主节点,不要留下部分分片还有入口、部分分片已经删除的混合状态。避免在共享环境使用 FUNCTION FLUSH 作为本例清理动作。
常见问题
为什么 FCALL deploy_catalog 找不到函数?
deploy_catalog 是库名;本例注册的调用名是 catalog_release。管理对象和业务入口是两个名称。
切换 Redis 数据库编号能隔离同名函数吗?
不能把库当成某个逻辑数据库内的普通数据键。应在服务范围内规划函数命名,独立环境需要独立实例或相应的部署隔离。
重新连接客户端是否需要再次加载?
函数库由服务端管理,客户端重新连接不应触发无条件重复安装。持久化恢复、复制和新节点接入属于服务部署职责,发布系统应明确管理它们。
最小部署闭环是:保存完整源码,用库名管理装载和替换,用注册函数名调用,再把同一版本覆盖到需要的主节点。更新和回滚都围绕完整库文件安排。
Redis ZRANK 与 ZREVRANK 怎样判断成员位置
- 上一篇
- Redis ZRANK 与 ZREVRANK 怎样判断成员位置
- 下一篇
- Redis EVALSHA 怎样复用已加载脚本
-
- 数据库 · Redis | 22分钟前 | 排行榜 · redis ZREVRANK Sorted Set ZRANK 有序集合排名
- Redis ZRANK 与 ZREVRANK 怎样判断成员位置
- 114浏览 收藏
-
- 数据库 · Redis | 24分钟前 | redis count set 随机成员 SRANDMEMBER
- Redis SRANDMEMBER COUNT 怎样随机读取多个成员而不删除
- 443浏览 收藏
-
- 数据库 · Redis | 30分钟前 | redis streams 消费组 XGROUP CREATE MKSTREAM
- Redis XGROUP CREATE MKSTREAM 怎样为不存在的 Stream 建消费组
- 164浏览 收藏
-
- 数据库 · Redis | 16小时前 | Redis · 缓存 · redis TTL maxmemory-policy eviction
- Redis eviction 触发后为什么带 TTL 的键不一定先被删除
- 484浏览 收藏
-
- 数据库 · Redis | 16小时前 |
- Redis AOF 重写期间怎样观察写入缓冲增长
- 296浏览 收藏
-
- 数据库 · Redis | 16小时前 |
- Redis BITFIELD 怎样存储多个小整数并读取指定范围
- 266浏览 收藏
-
- 数据库 · Redis | 16小时前 | redis集群 · Redis Cluster MOVED ASK hash slot resharding CLUSTER SETSLOT
- Redis Cluster resharding 时怎样减少业务请求的 MOVED
- 297浏览 收藏
-
- 数据库 · Redis | 16小时前 | redis hyperloglog 去重 PFADD PFCOUNT 基数估算
- Redis HyperLogLog 估算去重数为什么不能取回原始成员
- 155浏览 收藏
-
- 数据库 · Redis | 16小时前 | 排行榜 · Sorted Set · redis 分页 排行榜 有序集合 ZRANGE
- Redis ZRANGE 怎样按分数和成员稳定读取排行榜
- 189浏览 收藏
-
- 数据库 · Redis | 16小时前 | redis集群 · redis Redis Cluster CROSSSLOT Hash Tag CLUSTER KEYSLOT
- Redis CROSSSLOT 错误怎样用 key tag 重写键名
- 460浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 1027次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 1029次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 1173次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 1133次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 972次使用
-
- Redis Stream XTRIM 如何避免消费组积压无限增长
- 2026-09-12 501浏览
-
- Redis AOF rewrite 期间如何判断磁盘与内存压力
- 2026-09-12 501浏览
-
- Redis RDB 和 AOF 怎么按可接受数据丢失量选择
- 2026-09-08 501浏览
-
- Redis XAUTOCLAIM 之后为什么仍有 pending:JUSTID、PEL 与消息删除边界
- 2026-08-29 501浏览
-
- Redis SET 的 GET 与 KEEPTTL 怎么一起验收:旧值返回、续期与回滚边界
- 2026-08-20 501浏览

