我如何在Redis中从脚本调用另一个脚本?

我想要依次运行多个Lua脚本,不允许在它们之间进行任何命令操作。我还需要将第一个脚本的结果传递给第二个脚本等等。

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

点赞
用户204011
用户204011

你不能那样做。然而,只要您不使用 Redis Cluster,这种违反 EVAL 语义的方式就不应该成为问题。

2014-06-12 19:48:42
用户3160475
用户3160475

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

这项功劳归功于 Josiah Carlson(他又将功劳归于 Nathan Fritz)。Josiah 博士很慷慨地在 此处 提供了所有细节(这个文件是一个 Python 包的一部分,该包帮助管理调用其他脚本的 Lua 脚本)。

2014-06-12 21:16:17