Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Redis HGETALL调用返回高效字典的Lua脚本_Lua_Redis_Lua Table - Fatal编程技术网

从Redis HGETALL调用返回高效字典的Lua脚本

从Redis HGETALL调用返回高效字典的Lua脚本,lua,redis,lua-table,Lua,Redis,Lua Table,我需要从Lua脚本中使用RedisHMGET,并在下面的代码中提取特定的值。 但是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_

我需要从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