【发布时间】:2022-06-17 18:58:18
【问题描述】:
我正在尝试通过 C# StackExchange 库使用以下 Lua 脚本:
private const string LuaScriptToExecute = @"
local current
current = redis.call(""incr"", KEYS[1])
if current == 1 then
redis.call(""expire"", KEYS[1], KEYS[2])
return 1
else
return current
end
每当我“作为字符串”评估脚本时,它可以正常工作:
var incrementValue = await Database.ScriptEvaluateAsync(LuaScriptToExecute,
new RedisKey[] { key, ttlInSeconds });
如果我理解正确的话,每次调用ScriptEvaluateAsync方法时,脚本都会传输到redis服务器,效果不是很好。
为了克服这个问题,我尝试使用“准备好的脚本”方法,通过运行:
_setCounterWithExpiryScript = LuaScript.Prepare(LuaScriptToExecute);
...
...
var incrementValue = await Database.ScriptEvaluateAsync(_setCounterWithExpiryScript,
new[] { key, ttlInSeconds });
每当我尝试使用这种方法时,都会收到以下错误:
ERR Error running script (call to f_7c891a96328dfc3aca83aa6fb9340674b54c4442): @user_script:3: @user_script: 3: Lua redis() command arguments must be strings or integers
我做错了什么?
使用“准备好的”接收动态参数的 LuaScript 的正确方法是什么?
【问题讨论】:
标签: redis lua stackexchange.redis