【问题标题】:How to write a lua script to get multiple keys at once from Redis?如何编写一个 lua 脚本以一次从 Redis 获取多个键?
【发布时间】:2018-08-02 10:51:27
【问题描述】:

我正在尝试编写一个 Lua 脚本,该脚本将从 Redis 数据库返回多个键。我要运行的脚本是:

script load "local values = redis.call('MGET', unpack(ARGV)); local results = {}; for i, key in ipairs(ARGV) do results[key] = values[i] end; return results"

然后我会尝试使用 evalsha 运行它(无论它返回的 sha 编号是多少)0 dog cat(其中 dog 和 cat 是我保存在数据库中的两个键)。

理想情况下,它会返回“woof”“meow”,因为这些值是存储在键 dog 和 cat 中的值。出于某种原因,此脚本将始终返回一个空列表或集合,我不明白为什么。任何帮助解决它都将不胜感激!

【问题讨论】:

    标签: lua redis scripting


    【解决方案1】:

    results 应该是一个数组,即用数字索引,NOT 字符串。详情请见conversion between Lua and Redis data types

    为了使其正常工作,请将results[key] = values[i] 更改为results[i] = values[i]

    另外,其实values也可以直接返回,不用把values转成results.

    【讨论】:

    • 谢谢!这完美地解决了它。所以我的问题是我试图用字符串而不是数字来索引数组?
    • 比手头的问题更重要的是,OP 在他的 Lua sn-p 中使用 ARGV 而不是 KEYS - 这是不正确的,可能会在未来产生麻烦
    • 是的,Redis 只能将 Lua 数组转换为多批量回复。同样正如@ItamarHaber 提到的,您应该使用KEYS 传递这两个键。
    猜你喜欢
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 2020-09-05
    • 2017-01-20
    • 2021-10-27
    • 2012-07-02
    • 2020-10-07
    • 1970-01-01
    相关资源
    最近更新 更多