【问题标题】:Why there are KEYS and ARGV arrays when calling Redis Lua scripts?为什么调用 Redis Lua 脚本时会有 KEYS 和 ARGV 数组?
【发布时间】:2018-10-03 00:42:37
【问题描述】:

从 Redis 中调用 Lua 脚本时,可以在两个数组中传递值:KEYS 和 ARGV。有什么区别? Redis 如何处理 KEYS 数组中的值?如果在我的脚本中,我必须使用在运行时动态生成的密钥怎么办?

【问题讨论】:

    标签: redis


    【解决方案1】:

    您的所有问题都在EVAL 页面上得到解答,但既然您问...:

    有什么区别?

    KEYS 用于传递键名,而ARGS 应该用于其他任何东西。这不是完全强制执行的(即大多数时候你可以混合它们),但如果不遵循可能会导致潜在的问题。

    Redis 如何处理 KEYS 数组中的值?

    检查KEYS 的内容以验证所有密钥都可用于运行脚本的 Redis 分片。这种机制允许在 Redis 集群部署中运行脚本。

    如果在我的脚本中,我必须使用在运行时动态生成的密钥怎么办?

    查看以前的答案 - 这是可行的,但您会违反建议。您的脚本只能在独立的 Redis 实例上安全运行,并且由于未指定此行为,因此它可能会在未来的版本中中断。

    【讨论】:

    • 你有什么想法,如何处理多键,这将在像SORT mySet BY myHash:*->order GET myHash:*->name这样的SORT命令中使用?我可以通过myHash:* 或类似的东西吗?
    • @Schovi 似乎与此问题和答案无关 - 请查看 Stack Overflow 上的现有问题,或发布新问题
    • 您能否详细解释一下“检查密钥以验证所有密钥都可用于在 Redis 集群中运行脚本的 Redis 分片”,或者提供一些链接,当我们使用 ARGV 时会发生什么将自己视为关键?在集群环境中动态创建密钥的缺点是什么。我更担心“它可能会在未来的版本中中断”的说法。请帮忙。
    • KEYS 机制确保脚本可以在集群中的给定分片上运行 - 如果 KEYS 中的键没有散列到正在执行的分片的插槽之一,则会引发 CROSSSLOT 错误。
    • Your script will be safe to run only on a stand alone Redis instance and since this behavior isn't specified, it may break in future releases. 这似乎严重限制了lua脚本的用处...
    猜你喜欢
    • 2013-09-29
    • 2012-06-30
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 2014-04-15
    • 1970-01-01
    • 2017-05-23
    相关资源
    最近更新 更多