lua - 为什么在redis重启后我不能在redis中运行lua脚本?

标签 lua redis

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

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

这是为什么?

最佳答案

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

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

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

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

关于lua - 为什么在redis重启后我不能在redis中运行lua脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16692233/

相关文章:

lua - 在 corona 中创建一个带有图像的类

file - 写入文件nodemcu lua

python - 通过 Celery 连接两个独立的项目

mysql - 使用 Redis 缓存实时单页应用程序中使用的数据

caching - MySql 与 Spring Cache 的 Redis 缓存策略

node.js - redis rsmq worker 无法从 redis 队列中获取消息

memory-management - Lua - 数一数。对表的引用

Lua 对象 - 构造函数中的错误初始化

lua - 如何将 os.execute ("dir") 中的目录信息保存到字符串中?

php - CakePHP 2.6,Redis session /缓存在重定向时被销毁