【发布时间】:2014-08-03 04:58:04
【问题描述】:
我想一个接一个地运行许多 Lua 脚本,不允许任何命令在其间运行。我还需要将第一个脚本的结果传递给第二个,等等。
我通过将所有脚本放在一个文件中暂时解决了这个问题。但是,第二个脚本修改了第一个脚本返回的键。因此,将所有内容放在一个文件中违反了 EVAL 命令语义,因为第二个脚本使用的所有键都应使用 KEYS 数组传递。
【问题讨论】:
我想一个接一个地运行许多 Lua 脚本,不允许任何命令在其间运行。我还需要将第一个脚本的结果传递给第二个,等等。
我通过将所有脚本放在一个文件中暂时解决了这个问题。但是,第二个脚本修改了第一个脚本返回的键。因此,将所有内容放在一个文件中违反了 EVAL 命令语义,因为第二个脚本使用的所有键都应使用 KEYS 数组传递。
【问题讨论】:
你不能那样做。但是,只要您不使用 Redis Cluster,以这种方式违反 EVAL 语义应该不是问题。
【讨论】:
其实是可以的。 Redis 有一个未记录的功能,允许这样做。基本前提是,一旦您 EVAL 或 SCRIPT LOAD 脚本,您可以通过调用函数 f_<sha1 hash>(其中 sha1 hash 是第一个脚本的 SHA1 哈希)从另一个脚本调用该脚本。
这要归功于 Josiah Carlson(他反过来归功于 Nathan Fritz)。 Josiah 博士非常友好地在here 中提供了所有详细信息(此文件是 Python 包的一部分,可帮助管理调用其他脚本的 Lua 脚本)。
【讨论】:
lua。但这是我必须的。