我正在尝试使用Lua脚本在哈希中搜索字段值,我做错了什么:) 我有关键的“文章”,它是zset持有文章ID和密钥文章:n其中“n”是文章编号。 以下脚本:
local ids = redis.call("zrange", 'articles', '0', '-1')
local ret = {}
for k, id in pairs(ids) do
local row = redis.call("hgetall", "article:"..id)
ret[k] = row
end
return ret
返回:
1) 1) "slug"
2) "first-title"
3) "title"
4) "first title"
2) 1) "slug"
2) "second-title"
3) "title"
4) "second title"
我试图包含条件只返回标题中包含字符串“second”的键,但它不返回任何内容。
local ids = redis.call("zrange", 'articles', '0', '-1')
local ret = {}
for k, id in pairs(ids) do
local row = redis.call("hgetall", "article:"..id)
if (string.find(row[4], "second")) then
ret[k] = row
end
end
return ret
请你能帮帮我吗?
答案 0 :(得分:2)
您从lua返回的表格必须是其索引从1
开始的数组。
但是,在您的示例中,只有第二篇文章与条件匹配,其索引为2
。事实上,您将表格设置为:ret[2] = row
。由于返回的表不是索引从1
开始的数组,因此Redis将其作为空数组,并且什么也得不到。
<强>解决方案:强>
local ids = redis.call("zrange", 'articles', '0', '-1')
local ret = {}
local idx = 1; -- index starting from 1
for k, id in pairs(ids) do
local row = redis.call("hgetall", "article:"..id)
if (string.find(row[4], "second")) then
ret[idx] = row -- set table
idx = idx + 1 -- incr index by 1
end
end
return ret
答案 1 :(得分:0)
试试这个条件
if (string.find(row[4], "second") ~= nil) then