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

标签 lua redis lua-table

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

关于从 Redis HGETALL 调用返回高效字典的 Lua 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34313598/

相关文章:

file - 写入文件nodemcu lua

Lua 错误 - 需要删除的错误参数 #1

Lua reference function from inside table inside the table (Using "self"inside of table)

lua - 为什么 debug.getinfo(1) 的 'name' 为零

compiler-construction - 静态类型的 Lua

ruby-on-rails - 如何从匹配模式的redis列表中删除键?

python - 在 Redis 列表中批量插入值

function - Lua 函数——一个简单的误会

lua - 我如何运行像 'excavate 5'这样的computercraft程序

node.js - 如何格式化 node_redis 信息函数输出?