【问题标题】:How do I call a script from a script in Redis?如何从 Redis 中的脚本调用脚本?
【发布时间】:2014-08-03 04:58:04
【问题描述】:

我想一个接一个地运行许多 Lua 脚本,不允许任何命令在其间运行。我还需要将第一个脚本的结果传递给第二个,等等。

我通过将所有脚本放在一个文件中暂时解决了这个问题。但是,第二个脚本修改了第一个脚本返回的键。因此,将所有内容放在一个文件中违反了 EVAL 命令语义​​,因为第二个脚本使用的所有键都应使用 KEYS 数组传递。

【问题讨论】:

    标签: lua redis eval atomic


    【解决方案1】:

    你不能那样做。但是,只要您不使用 Redis Cluster,以这种方式违反 EVAL 语义应该不是问题。

    【讨论】:

    • Redis 集群可能是某个地方的必需品
    • 请看我的回答——实际上可以从脚本调用脚本。
    【解决方案2】:

    其实是可以的。 Redis 有一个未记录的功能,允许这样做。基本前提是,一旦您 EVAL 或 SCRIPT LOAD 脚本,您可以通过调用函数 f_<sha1 hash>(其中 sha1 hash 是第一个脚本的 SHA1 哈希)从另一个脚本调用该脚本。

    这要归功于 Josiah Carlson(他反过来归功于 Nathan Fritz)。 Josiah 博士非常友好地在here 中提供了所有详细信息(此文件是 Python 包的一部分,可帮助管理调用其他脚本的 Lua 脚本)。

    【讨论】:

    • 呃,这比你描述的要困难得多......如果不是效率更高,我根本不会在 redis 中使用lua。但这是我必须的。
    • @NappingRabbit - 无证意味着或不应该使用:) 你想做什么,或者为什么?
    • 在过去的 10 个小时里,我实际上已经重新考虑了我的封装。呵呵。我想以面向对象的方式使用 lua 构建一个对象。现在不用担心。感谢您的回复
    猜你喜欢
    • 2021-06-05
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    相关资源
    最近更新 更多