【问题标题】:Lua script to return efficient dictionary from Redis HGETALL call从 Redis HGETALL 调用返回高效字典的 Lua 脚本
【发布时间】:2016-03-22 16:22:38
【问题描述】:

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

【问题讨论】:

    标签: lua redis lua-table


    【解决方案1】:

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

    这省去了为每次哈希键检索调用 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
    

    【讨论】:

      猜你喜欢
      • 2020-03-18
      • 2014-04-02
      • 2017-06-26
      • 2014-06-01
      • 1970-01-01
      • 2017-01-07
      • 2021-09-29
      • 2017-09-26
      • 2018-08-05
      相关资源
      最近更新 更多