在Lua脚本中读取Redis流

问题描述 投票:0回答:2

我正在尝试阅读以下流:

127.0.0.1:6379> xrevrange driver:70 + - count 1
1) 1) "1656531417451-0"
   2) 1) "field1"
      2) "value1"
      3) "isbusy"
      4) "true"

如何在 Lua 脚本中读取此流并将该流中的字段

isbusy
反映到本地 Lua 变量
is_busy
中? 我无法理解 Lua 集合。

local stream = KEYS[1]

local is_busy = false

local messages  = redis.call("XREVRANGE", stream, "+", "-", "COUNT", "1")

for _, message in ipairs(messages) do
  


end

redis lua
2个回答
0
投票

您需要解析嵌套结构:

local id
for _, message in ipairs(messages) do
    for i, sub_msg in ipairs(message) do
        if i == 1 then
            id = sub_msg
        else
            -- parse attributes
            local i = 1
            while i < #sub_msg do
                local k = sub_msg[i]
                local v = sub_msg[i + 1]
                if k == "isbusy" then
                    is_busy = v
                end
                i = i + 2
            end
        end
    end
end

0
投票

文档说明如下:

条目由字段值对列表组成。字段值 对按照用户指定的顺序存储。 保证读取流的命令,例如 XRANGE 或 XREAD 以完全相同的顺序返回字段和值 由 XADD 添加。

因此,通过始终以相同的顺序写入字段,在读取操作期间搜索特定字段时不再需要迭代所有字段。该字段将与您编写它时的索引相同。

来源:https://redis.io/commands/xadd/

© www.soinside.com 2019 - 2024. All rights reserved.