0

我有一个这样的排序集:

    |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-script 中的结果表会是什么样子?(由于我无法调试,我不得不问)

来自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' }

还是不同?

4

2 回答 2

2

来自zrangebyscore ... withscores- 或任何从带有分数的排序集中读取的结果,实际上 - 将作为 lua 表返回,如下所示:

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

价值第一,得分第二。值和分数都是字符串。

于 2012-09-05T10:47:11.313 回答
1

假设您使用的可以写入标准输出,您可以添加转储函数并输出表格格式。

我用

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

因此,对于您的示例,您只需添加

debug = true
dump(var,'redis-table')
于 2012-09-05T10:39:28.093 回答