为什么我在redis重启后无法在redis中运行lua脚本?

时间:2013-05-22 12:49:21

标签: lua redis

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

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

1 个答案:

答案 0 :(得分:9)

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

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

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

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