我需要从 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
返回的平面数组中读取值的有效方法是什么?
或者,将返回值转换为适当的键值表?
最佳答案
经过一些分析和测试,我们发现以下函数具有良好的性能,并使用它来获取合适的表。
这样就无需为每个哈希键检索调用 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
关于从 Redis HGETALL 调用返回高效字典的 Lua 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34313598/