我需要HMGET
从Lua脚本中使用Redis 并在以下代码中提取特定值.但是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