我需要从Lua脚本中使用Redis HMGET
并在以下代码中提取特定值。
但redis.call('HMGET', table_key, hkey1, hkey2, ...)
会返回{hkey1, val1, hkey2, val2, ...}
按密钥提取值我写道:
local function flat_map_get(flat_map, hash_key)
local i = 1
while flat_map[i] do
if flat_map[i] == hash_key then
return flat_map[i+1]
end
i = i+2
end
end
当然,随着使用量的增加,多次调用此函数会导致性能下降。
从HMGET
返回的平面数组中读取值的有效方法是什么?
或者,将返回的值转换为正确的键值表?
答案 0 :(得分:6)
经过一些分析和测试后,我们发现以下函数具有良好的性能,并使用它来获得一个合适的表。
这节省了为每个哈希密钥检索调用getter函数的需要。
local function hgetall(hash_key)
local flat_map = redis.call('HGETALL', hash_key)
local result = {}
for i = 1, #flat_map, 2 do
result[flat_map[i]] = flat_map[i + 1]
end
return result
end