在Redis中,是否可以使用Lua返回存储在集合中的所有键作为哈希列表?

4
我有一个结构。
data_type:key1 - hash
data_type:key2 - hash
data_type:key3 - hash
data_type:key4 - hash
data_type:key5 - hash
data_type:index - set(key1, key2, key3, key4, key5)

在Redis中,你可以用Lua编写一个脚本来遍历数据类型为set的index,并将所有 data_type:key* 返回为散列列表。我正在学习Lua,在我的想法中,它应该类似于:

collect = []
for key_name in redis.call.smemembers('data_type:index'):
    collect.append( redis.call.smembers('data_type:' + key_name)
return collect

通常情况下,大多数索引都有约100个键,每个键大约为1KB。因此,在理想情况下,此脚本的响应大小为100-120KB。

在有人问之前,真正的键看起来像'some_data:status:{64 bit hex string}'和'some_data:index:2013:05:09',其中{64 bit hex string}是:index集合的成员之一。

1个回答

2

查看SSCAN命令

在您的情况下,以下内容应该有效:

local collect = {}
local match_pattern = "*"
local results = redis.call("SSCAN", "data_type:index", 0, "match", match_pattern)
for i, key_name in ipairs(results[2]) do 
  -- your code here (could be different depending on your needs)
  local key_value = redis.call("GET", "data_type:" .. key_name)
  if key_value then
    table.insert(collect, key_value)
  end 
end 
return collect

我会尽快核实,但这看起来像是我在寻找的答案! - David
1
@TechyTimo 请查看 eval 和/或 evalsha 命令以了解如何执行它。 - danielgpm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接