redis:“多 Bulk 回复” -> Lua 表格

我有一个像这样的已排序集合:

    |key  |score |member
zadd mykey 100    event:1
zadd mykey 101    event:2
zadd mykey 102    event:3

现在我使用 Lua 脚本从给定的分数范围返回子集:

var result = redis.call('zrangebyscore', 'mykey', start, stop, 'WITHSCORES')

在 Lua 脚本中,结果表会是什么样子?(由于我无法调试,所以必须询问)

redis-doc 上可以得到:Redis 多个回复 -> Lua 表(可能嵌套其他 Redis 数据类型)-这是我能找到的所有信息。

它会像这样吗:

result = { 'event:1', 100, 'event:2', 101, 'event:3', 102 }

还是像这样

result = { 100, 'event:1', 101, 'event:2', 102, 'event:3' }

或者是不同的呢?

点赞
用户438753
用户438753

假设你使用的工具可以写入标准输出,你可以添加一个 dump 函数并输出表格格式。

我使用的代码如下:

function dump (tt, label,indent, done)
    if debug == true then
       if label == nil then
          label = 'Dump'
       end
        done = done or {}
        indent = indent or 0
        if type(tt) == "table" then
            if indent == 0 then
                io.write(string.rep (" ", indent))
                io.write(label..'\n')
            end
            for key, value in pairs (tt) do
                io.write(string.rep (" ", indent)) -- indent it
                if type (value) == "table" and not done [value] then
                    done [value] = true
                    io.write(string.format("[%s] => table\n", tostring (key)));
                    io.write(string.rep (" ", indent+4)) -- indent it
                    io.write("(\n");
                    dump (value, tostring(key),indent + 7, done)
                    io.write(string.rep (" ", indent+4)) -- indent it
                    io.write(")\n");
                else
                    io.write(string.format("[%s] => %s\n",
                    tostring (key), tostring(value)))
                end
            end
        else
            io.write(tostring(label)..':'..tostring(tt))
        end
    else
        return
    end
end

因此你可以按照如下方式调用 dump 函数:

debug = true
dump(var,'redis-table')
2012-09-05 10:39:28
用户295262
用户295262

一个 zrangebyscore ... withscores 的结果——或者实际上是从一个带有分数的排序集合中读取的任何内容——将被作为一个 Lua 表返回,如下所示:

result = { "event:1", "100", "event:2", "101" }

值在前,得分在后。 值和得分都是字符串。

2012-09-05 10:47:11