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

我需要在 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 返回的扁平数组中读取值? 或者,将返回的值转换成 proper key-value 表?

点赞
用户1016142
用户1016142

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

这将避免为每个哈希键检索调用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
2015-12-16 13:41:53