首页 > 解决方案 > 有没有办法使用 Lua 仅在大于 Redis 中的 int 的哈希中使用 HGETALL 值?

问题描述

我试图只获取大于 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”

标签: redislua

解决方案


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

推荐阅读