我正在尝试阅读以下流:
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
您需要解析嵌套结构:
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
文档说明如下:
条目由字段值对列表组成。字段值 对按照用户指定的顺序存储。 保证读取流的命令,例如 XRANGE 或 XREAD 以完全相同的顺序返回字段和值 由 XADD 添加。
因此,通过始终以相同的顺序写入字段,在读取操作期间搜索特定字段时不再需要迭代所有字段。该字段将与您编写它时的索引相同。