redis - 有没有办法使用 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”
解决方案
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
推荐阅读
- apache-kafka - 处理 kafka 消费者中的反序列化错误(死信队列)
- entity-framework - 添加数据时是否可以确保顺序?
- excel - 如何仅禁用 Excel 电子表格中特定列的填充句柄?
- python - 计算嵌套列表中的最大差异
- html - 如何在使用 Spacy NER 预测命名实体时从文本中删除 html 标签,并再次使用 html 标签以原始格式显示相同的文本?
- d3.js - d3 浮动分组条在时间轴中具有范围值
- c# - 如何强制 MVC 应用程序在启用 Windows 身份验证的情况下要求提供凭据
- javascript - 选择框选项列表更改检测其他选择框更改未检测到更改
- python - 如何在pyautogui中单击图像中心
- vue.js - Vue Nuxt 滚动到不同的页面