当前位置: 首页 > 面试题库 >

使用变量KEYS从Lua调用Redis zunionstore

淳于玺
2023-03-14
问题内容

我有一个lua脚本,需要在可变数量的键上调用zunionstore。我正在尝试执行以下代码:

local args = redis.call("zrange", "weight", 0, -1, "WITHSCORES")
local r,w
local count = 0
local cmd = ' '
for i=1,#args,2 do
    cmd = cmd .. args[i] .. ":weight " -- building up a list of zsets
    count = count + 1
end
redis.call("zunionstore", "p2_test_set", count, cmd)

重要的几行是:

cmd = cmd .. args[i] .. ":weight "

生成键列表和实际调用:

redis.call("zunionstore", "p2_test_set", count, cmd)

但是,执行时出现以下错误:

redis-cli EVAL "$(cat p2.lua)" 0
(error) ERR Error running script (call to f_6dc6501103ea64a02798af1cc9132f8337cdcad4): @user_script:9: ERR syntax error

那么,如何将在lua脚本中计算出的可变数量的键传递给redis.call(“ zunionstore” …)命令?

提前致谢!


问题答案:

我解决这个问题的方法是:

for i=0,#array,1 do
    local tmp = {'zunionstore', key, #array[i], unpack(array[i])}
    redis.call(unpack(tmp))
end


 类似资料:
  • 主要内容:实例,赋值语句,实例,索引,实例变量在使用前,需要在代码中进行声明,即创建该变量。 编译程序执行代码之前编译器需要知道如何给语句变量开辟存储区,用于存储变量的值。 Lua 变量有三种类型:全局变量、局部变量、表中的域。 Lua 中的变量全是全局变量,哪怕是语句块或是函数里,除非用 local 显式声明为局部变量。 局部变量的作用域为从声明位置开始到所在语句块结束。 变量的默认值均为 nil。 实例 -- test.lua 文件脚

  • 变量在使用前,必须在代码中进行声明,即创建该变量。 编译程序执行代码之前编译器需要知道如何给语句变量开辟存储区,用于存储变量的值。 Lua 变量有三种类型:全局变量、局部变量、表中的域。 Lua 中的变量全是全局变量,那怕是语句块或是函数里,除非用 local 显式声明为局部变量。 局部变量的作用域为从声明位置开始到所在语句块结束。 变量的默认值均为 nil。 -- test.lua 文件脚本

  • 我对lua脚本的功能很陌生。我试过用, 操作系统。执行(“导出MY_VAR=10”) 伊奥。popen(“导出MY_VAR=10”) 从 lua 脚本。 我尝试在执行lua脚本后使用 echo $MY_VAR 从 shell 中读取MY_VAR变量,但我没有看到MY_VAR设置为 10。 如何使用lua脚本设置环境变量?

  • 我正在做一个新的项目,我试图建立一个货币系统,在那里我可以提取它,以转移到另一个变量(在另一个类)。我在解决这个问题上遇到了一些问题,我对如何编写代码感到非常失望。下面是我想链接的类(我想让“coinsamount”在我做/存款时进入类2“amount” 第2类:

  • 我还不了解框架,你能帮我解决这个错误吗?我正在尝试获取基本用户数据并在此处输入图像描述 颤振医生: [!]Android工具链-为Android设备开发(Android SDK版本30.0.0)!某些Android许可证不被接受。要解决此问题,请运行:flutter博士--android-许可证[!]Android Studio(4.0版)X Flutter插件未安装;这增加了Flutter特定功

  • 问题内容: 从Redis调用Lua脚本时,可以在两个数组中传递值:KEYS和ARGV。有什么区别?Redis如何处理KEYS数组中的值?如果在我的脚本中必须使用运行时动态生成的密钥怎么办? 问题答案: 您的所有问题都会在页面上得到回答,但是自从您问到…: 有什么区别? 用于传递键名称,而应用于其他任何名称。这不是完全强制执行的(即,大多数情况下您可以将它们混合使用),但如果不遵循,可能会导致潜在的