如何从Redis中的脚本调用脚本?

时间:2014-06-12 18:40:24

标签: lua redis eval atomicity

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

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

2 个答案:

答案 0 :(得分:9)

实际上,这是可能的。 Redis有一个无证的功能,可以做到这一点。基本前提是,一旦您EVAL或SCRIPT LOAD脚本,您可以通过调用函数f_<sha1 hash>(其中sha1 hash是第一个脚本的SHA1哈希)来调用另一个脚本。

归功于Josiah Carlson(他反过来称赞Nathan Fritz)。 Josiah博士非常友好地提供here中的所有细节(该文件是Python包的一部分,有助于管理调用其他脚本的Lua脚本)。

答案 1 :(得分:-1)

你做不到。但是,只要不使用Redis群集,违反EVAL语义就不应该成为问题。