小编典典

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

redis

我在运行Lua脚本时遇到问题,这是我在做什么:

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

为什么是这样 ?


阅读 585

收藏
2020-06-20

共1个答案

小编典典

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

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

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

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

2020-06-20