【发布时间】:2020-09-29 17:45:07
【问题描述】:
在StackExchange.Redis docs for scripting 中,它说可以使用 LoadedLuaScript 来避免在每次评估时将 Lua 脚本重新传输到 redis。然后给出了将脚本加载到服务器中的示例。我认为不应该每次调用脚本时都这样做,那么脚本应该加载到哪里?
如果redis服务器重启,脚本是不持久的,那么应该如何处理呢?是否应该在 ConnectionMultiplexer 的 ConnectionRestored 事件中加载它们?大概您需要将它们存储在 ConcurrentDictionary 中?
【问题讨论】:
-
使用
SCRIPT LOAD命令将脚本加载到redis 本身。此命令返回 sha1 哈希,因此此哈希可以与EVALSHA命令一起使用以调用此脚本。事实上,这个脚本可以被任何人加载,你的应用程序可以只使用这个哈希。 -
谢谢,但我知道这些信息。问题是关于何时以及如何运行 SCRIPT LOAD 命令。您可以在应用启动时执行此操作 - 但如果重新启动 redis 会发生什么?
-
来自文档
The script is guaranteed to stay in the script cache forever。基本逻辑就是使用 EVALSHA,如果出现NOSCRIPT错误调用 SCRIPT LOAD 并重试