当前位置: 首页 > 面试题库 >

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

拓拔嘉颖
2023-03-14
问题内容

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

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

为什么是这样 ?


问题答案:

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

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

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

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



 类似资料:
  • 主要内容:第一个Lua脚本命令,为什么使用Lua脚本,常用脚本命令,基本命令应用从 Redis 2.6 版本开始,Redis 使用内置的 Lua 解释器执行脚本,这意味着我们可以直接在 Redis 客户端执行Lua 脚本 ,于此同时 Redis 还非常贴心地提供了用于编写 Lua 脚本的 命令。 第一个Lua脚本命令 Lua 是一种轻量小巧、开源的脚本语言,用标准 C语言编写。其设计目的就是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。它被广泛的应用于:游戏开发

  • “我们可能会反对并最终删除交易”和“你可以用Redis交易做的一切,你也可以用脚本做” http://redis.io/topics/transactions 但真的吗?我看到了一个问题。 http://redis.io/commands/eval 我看到的EVAL的问题是,您无法在脚本中获取这些变量的状态,也无法根据这些变量的状态进行唯一的写入。同样:“在给定相同的输入数据集的情况下,脚本总是用

  • 问题内容: 我有一个简单的Lua脚本: 为什么此脚本阻止Redis服务器?如果我在另一个控制台命令中运行,例如:设置测试1,结果: 问题答案: Redis是单线程的。每个命令都会阻止它。也是命令,因此它会阻止redis。

  • 问题内容: 在Redis中,我通过CLI运行Lua脚本,如下所示:- 因此,我的Lua脚本接受4个键和2个参数。 现在,我想在Node.js中运行相同的脚本。 我正在使用此库在我的应用程序中导入Redis。 我没有找到任何有关执行Lua脚本的函数参数的示例。 因此,我只是碰到一些可能起作用的东西。但是似乎没有任何作用。 我的app.js像这样: 我的问题:如何使用node.js执行以下命令,以便它

  • 问题内容: 从Redis调用Lua脚本时,可以在两个数组中传递值:KEYS和ARGV。有什么区别?Redis如何处理KEYS数组中的值?如果在我的脚本中必须使用运行时动态生成的密钥怎么办? 问题答案: 您的所有问题都会在页面上得到回答,但是自从您问到…: 有什么区别? 用于传递键名称,而应用于其他任何名称。这不是完全强制执行的(即,大多数情况下您可以将它们混合使用),但如果不遵循,可能会导致潜在的

  • redis-lua 是 Redis 的 Lua 语言的客户端开发包。 示例代码: require 'redis'local redis = Redis.connect('127.0.0.1', 6379)local response = redis:ping() -- trueredis:set('usr:nrk', 10)redis:set('usr:nobody', 5)l