有没有办法在Redis中使用Lua仅将散列中的HGETALL值大于int?

时间:2019-07-19 08:43:09

标签: redis lua

我正试图只获取Lua大于1800的哈希值。我是Lua的新手,我不确定如何从Redis获取值,因为redis.call()方法仅返回1。

这是我的代码。在这里,我的哈希键是“ 1”,“ 2”,“ 3”等,只是为了使其更简单。

for i=1,length do
  value = tonumber(redis.call("HGET", KEYS[1], i))
  if value >= 1800 then
    return redis.call("HGET", KEYS[1], i)
  end
end

假设我有一个名为Data的哈希,如下所示:

HGETALL数据  1)“星期一”  2)“ 1802”  3)“星期二”  4)“ 1283”  5)“星期三”  6)“ 3487”  7)“星期四”  8)“ 1899”  9)“星期五” 10)“ 1709” 11)“星期六” 12)“ 1909” 13)“星期日” 14)“ 1799”

我希望当我使用HGETALL方法时,会得到:

1)“星期一”  2)“ 1802”  5)“星期三”  6)“ 3487”  7)“星期四”  8)“ 1899” 11)“星期六” 12)“ 1909”

1 个答案:

答案 0 :(得分:0)

for i=1,length do
  value = tonumber(redis.call("HGET", KEYS[1], i))
  if value >= 1800 then
    return redis.call("HGET", KEYS[1], i)
  end
end

此代码告诉您的计算机:浏览所有条目并给我第一个> 1802。

如果要获得以上所有值,则有几个选择。

您可以使用HGETALL获得完整的条目列表,然后过滤返回的条目列表,或者获得单个元素并在它们大于等于1800时将它们放入列表中。

  

return语句用于从函数或函数中返回值   块(这是一个匿名函数)。

这意味着您返回的任何函数都将在返回时结束。

因此,如果您要处理多个条目,那么在循环中使用它并不是真正的选择。

尝试类似

   -- create an empty table
    local greatValues = {}
    for i=1,length do
      value = tonumber(redis.call("HGET", KEYS[1], i))
      if value >= 1800 then
       -- insert any value that is >=1800 into the table
       table.insert(greatValues, value)
      end
    end
    -- return the list of results
    return greatValues