为什么在 Redis 重新启动后我无法运行 Lua 脚本?

我在运行 Lua 脚本时遇到问题,下面是我的操作过程:

  1. 我使用 LOAD SCRIPT 命令将脚本加载到 Redis 中,并获取了该脚本的 SHA。
  2. 我使用 SHA 测试了脚本,结果没有问题。
  3. 我执行 SAVE(或者 BGSAVE)、SHUTDOWN 命令,然后重新启动 Redis 服务器,但是却不能再使用之前能够使用的 SHA 执行我的脚本了。

为什么会出现这种情况呢?

点赞
用户1114486
用户1114486

Server-side Lua 脚本

Redis 并不会保存或存储服务器端的 Lua 脚本,它们与 RDBMS 中的存储过程并不相似。

客户端至少需要在第一次执行脚本时提供脚本的文本(即使用 EVAL 进行第一次执行,之后使用 EVALSHA)。或者,您也可以使用 SCRIPT LOAD 和 SCRIPT EXISTS,根据情况可能更方便。

这对于应用程序来说可能更加复杂,但好处是它使 Redis 服务器在 Lua 脚本方面成为无状态。应用程序的代码(包括 Lua 脚本)由应用程序端管理。在加载应用程序的新版本之前,您不需要在 Redis 服务器上应用任何内容(即使 Lua 脚本已更改)。

这个特性在支持实时应用程序加载、客户端分片或 Redis 集群的分布式基础设施中非常有用。

2013-05-22 15:02:49