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

6

我需要在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返回的平面数组中读取值的有效方法是什么? 或者,将返回的值转换为适当的键值表的方法是什么?

1个回答

14

经过一些分析和测试,我们发现以下函数性能良好,并使用它来获取适当的表格。

这样可以避免为每个哈希键检索调用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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接