我的设置是3主、3从Redis集群,版本7.x。
我创建了一个简单的基于 Lua 的函数:
#!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
但是,当我从 redis 命令提示符执行它时
127.0.0.1:7002> FCALL logMsg 1
我看到错误:
(error) ERR Function not found
我在这里做错了什么?
当我运行它时
127.0.0.1:7000> FCALL logMsg 1 a
我看到错误了
-> Redirected to slot [15495] located at 127.0.0.1:7002
(error) ERR Function not found
我看到错误:(错误)ERR 功能未找到
因为你在一个节点(127.0.0.1:7000)上调用
FUNCTION LOAD
,而在另一个节点(127.0.0.1:7002)上调用FCALL
。该函数仅在127.0.0.1:7000上加载,其他节点没有加载该函数。
您需要在 Redis 集群中的每个节点上调用
FUNCTION LOAD
。
我看到错误了
-> 重定向到位于 127.0.0.1:7002 的插槽 [15495] (错误)ERR 未找到函数
因为您的函数尝试操作的密钥位于节点 127.0.0.1:7002 上,并且您的客户端被重定向到它,并且同样,它没有加载该函数。