Jon*_*yMC 5 lua stackexchange.redis
在StackExchange.Redis 脚本文档中,它说可以使用 LoadedLuaScript 来避免每次评估时将 Lua 脚本重新传输到 redis。然后给出了将脚本加载到服务器中的示例。我认为每次调用脚本时都不应该这样做,那么脚本应该加载到哪里?
如果redis服务器重启,脚本就不会持久,那么应该如何处理呢?是否应该在 ConnectionMultiplexer 的 ConnectionRestored 事件中加载它们?想必您需要将它们存储在 ConcurrentDictionary 中?
StackExchange.Redis 在内部处理 Lua 脚本缓存。通常你不必关心手动加载Lua脚本到redis。
StackExchange.Redis 在第一次调用“ScriptEvaluate”时自动将 Lua 脚本传输到 redis。对于同一脚本的进一步调用,仅使用哈希:
var prepared = LuaScript.Prepare(script);
prepared.Evaluate(someDb); // loads the script to redis and calls it
var prepared2 = LuaScript.Prepare(script);
prepared2.Evaluate(someDb); // calls the script by it's hash
Run Code Online (Sandbox Code Playgroud)
LoadedLuaScript 对于边缘情况可能很有用,例如加载而不执行。
我还澄清了官方 doku。
背景资料
该库尝试通过哈希值调用脚本,如果脚本丢失,则会出现 NOSCRIPT 错误,然后传输脚本。
请参阅https://github.com/StackExchange/StackExchange.Redis/blob/main/src/StackExchange.Redis/RedisDatabase.cs中的 ScriptEvalMessage:GetMessages
该行为也在官方 StackExchange.Redis github 存储库中进行了讨论和解释:
| 归档时间: |
|
| 查看次数: |
1460 次 |
| 最近记录: |