如何通过 Lua 在 Redis 中只 HGETALL 大于一个 int 值的哈希?

我想通过 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 Data

  1. "monday"
  2. "1802"
  3. "tuesday"
  4. "1283"
  5. "wednesday"
  6. "3487"
  7. "thursday"
  8. "1899"
  9. "friday"
  10. "1709"
  11. "saturday"
  12. "1909"
  13. "sunday"
  14. "1799"

我期望使用 HGETALL 方法时,得到如下结果:

  1. "monday"
  2. "1802"
  3. "wednesday"
  4. "3487"
  5. "thursday"
  6. "1899"
  7. "saturday"
  8. "1909"
点赞
用户2858170
用户2858170
```lua
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时获取单个元素并将它们放入列表中。

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

也就是说,如果您返回,您所在的函数将结束。

因此,如果您要处理多个条目,那么在循环内使用它实际上不是一个选项。

试试这样的方法

   -- 创建一个空表
    local greatValues = {}
    for i=1,length do
      value = tonumber(redis.call("HGET", KEYS[1], i))
      if value >= 1800 then
       -- 在1800以上的地方插入任何值到表中
       table.insert(greatValues, value)
      end
    end
    -- 返回结果列表
    return greatValues
2019-07-19 11:17:23