You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Redis 7.x集群加载Lua函数后执行提示Function not found问题排查

问题描述

环境为3主3从的Redis 7.x集群,编写了Lua函数库loggerLib,代码如下:

#!lua name=loggerLib
local function logMsg(keys, args)
    redis.log(redis.LOG_NOTICE, 'Hello!');
end
redis.register_function('logMsg', logMsg)

通过以下命令加载函数:

cat loggerLib.lua | redis-cli -c -p 7000 -x FUNCTION LOAD REPLACE

但执行以下命令时,均返回错误(error) ERR Function not found:

127.0.0.1:7002> FCALL logMsg 1
127.0.0.1:7000> FCALL logMsg 1 a
问题原因与解决方法
  • Redis集群模式下,FUNCTION LOAD命令仅会在当前连接的节点(此处为7000节点)加载函数,不会自动同步至集群内其他节点,因此连接7002节点时会提示函数未找到。
  • 即使在加载函数的7000节点执行FCALL,命令参数也不符合规范:FCALL的语法为FCALL <函数名> <键的数量> [键...] [参数...],你指定了键数量为1但未提供具体键名;后续的FCALL logMsg 1 a虽补充了参数,但这不是函数未找到的核心原因,仅属于参数格式问题。

解决步骤

  1. 为所有集群节点加载函数:分别连接集群内的每个主从节点(7000、7001、7002等),执行相同的FUNCTION LOAD命令,确保每个节点都加载了loggerLib库及logMsg函数。
  2. 修正FCALL命令参数:由于你的Lua函数未使用键和参数,应将键的数量指定为0,正确命令如下:
    FCALL logMsg 0
    

内容的提问来源于stack exchange,提问作者RRM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 05:12:10