3

我在运行 Lua 脚本时遇到问题,这就是我正在做的事情:

  1. 我使用 LOAD SCRIPT 将脚本加载到 redis 并获取我的脚本的 SHA。
  2. 我用 SHA 测试我的脚本,没关系。
  3. 我执行了 SAVE(BGSAVE)、SHUTDOWN 并再次运行 redis 服务器,但我无法使用 SHA 执行我的脚本,而我以前可以。

为什么是这样 ?

4

1 回答 1

11

Redis 不会保存或存储服务器端 Lua 脚本。它们与您可以在 RDBMS 中找到的存储过程不同。

客户端应该至少为脚本的第一次执行提供脚本的文本(即,第一次执行使用 EVAL,下一次调用使用 EVALSHA)。或者,您也可以使用 SCRIPT LOAD 和 SCRIPT EXISTS,根据情况可能会更方便。

这对应用程序来说处理起来有点复杂,但有好处:它使 Redis 服务器在 Lua 脚本方面无状态。应用程序的代码(包括 Lua 脚本)在应用程序端进行管理。在加载应用程序的新版本之前,您不需要在 Redis 服务器上应用某些内容(即使 Lua 脚本已更改)。

此属性在分布式基础架构的上下文中非常有用,可支持动态应用程序加载、客户端分片或 Redis 集群。

于 2013-05-22T15:02:49.243 回答