【问题标题】:Why does Redis forbid user script to call other scripts? How to keep Lua scripts' maintainability为什么 Redis 禁止用户脚本调用其他脚本?如何保持 Lua 脚本的可维护性
【发布时间】:2014-03-16 03:08:47
【问题描述】:

Redis 禁止在用户脚本中使用“EVAL”和“EVALSHA”等命令。我们可以从 scuh 禁令中得到什么好处?

绕过此限制的一种方法是将所有 Lua 脚本放在一个中。但是,它违反了脚本的可维护性。他们有更好的解决方案吗?

【问题讨论】:

  • 您可能需要考虑lua-call允许您的 Redis Lua 脚本在 Redis 内部相互调用的包装器和库。

标签: redis


【解决方案1】:

由于写操作的可复制性,Redis 禁止这样做。

脚本的 SHA1 校验和应该描述 Lua 脚本所做的一切。 当脚本和数据被复制并在 Redis 从站上执行时,结果应该完全相同相同。

因此,具有随机性质的功能,如 randtime 被排除在写入操作之外。 为什么evalevalsha 也被禁止读取脚本,可能是因为它使'is-write-script' 分析变得不可能或至少很麻烦。

有关如何解决此问题的可能解决方案,请参阅this 帖子。

我们在连接不同的redis服务器时使用这种SHA1响应值回送机制,见diagram

希望这会有所帮助,TW

【讨论】:

  • 谢谢!你说“可能是因为它使'is-write-script'分析变得不可能或至少很麻烦。”是不是说Redis理论上可以支持在Lua脚本中调用EVAL&EVALSHA但是作者选择不做呢?
  • 会不会和复制有关?从站也会复制脚本吗?
  • 此外,我正在编写一个简单的 Lua 宏系统,它可以将其他脚本复制到一个文件中。会不会很实用?
  • 作者(antirez)肯定选择了这个。而我能从他的角度理解这个决定,这是一个不错的选择。 Redis 应该保持简单和可靠。你的宏观系统:是的,这可能是一个很好的做法。能举几个例子吗?
  • 您好,民生,只是想给您提个醒,一些新的见解。请参阅 here,Josiah 的好帖子,如果你能忍受一些 hackiness。
猜你喜欢
  • 1970-01-01
  • 2014-08-03
  • 2021-10-27
  • 2014-04-15
  • 1970-01-01
  • 1970-01-01
  • 2012-06-30
  • 2014-03-10
  • 2019-06-02
相关资源
最近更新 更多