ziv*_*ziv 11 lua stackexchange.redis azure-redis-cache
我正在尝试在Azure WebApp上使用StackExchange.Redis并需要运行一些Lua脚本.
建议的方法是将脚本加载到服务器,但我很难理解正确的模式.
我认为应该做的方式是在WebApp初创公司:
LuaScript luaScript = LuaScript.Prepare(scriptString);
var endpoints = redis.GetEndPoints();
var endpoint = endpoints[0];
IServer server = redis.GetServer(endpoint);
LoadedLuaScript loadedScript = luaScript.Load(server);
Run Code Online (Sandbox Code Playgroud)
然后保留LoadedLuaScript供以后使用(与ConnectionMultiplexer一起使用).然后当我想运行Lua脚本时:
IDatabase db = redis.GetDatabase();
db.ScriptEvaluate(loadedScript);
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?
由于Azure可以有多个Redis节点,我应该为每个端点运行luaScript.Load并只保留其中一个以供以后使用吗?即:
LuaScript luaScript = LuaScript.Prepare(script);
var endpoints = redis.GetEndPoints();
LoadedLuaScript loadedScript;
foreach (var endpoint in endpoints)
{
IServer server = redis.GetServer(endpoint);
loadedScript = luaScript.Load(server);
}
return loadedScript;
Run Code Online (Sandbox Code Playgroud)
请参阅文档。使用 StackExchange.Redis,您无需手动将 Lua 脚本加载到 Redis。而且你不必使用LoadedLuaScript。
即使您有多个 Redis 节点,LuaScript 类也会自动处理脚本的传输。它尝试通过哈希值调用脚本,如果脚本丢失,则会出现 NOSCRIPT 错误,然后传输脚本。
正确的方法是简单地调用
LuaScript.Prepare(script).Evaluate(myDb)
Run Code Online (Sandbox Code Playgroud)
请参阅https://github.com/StackExchange/StackExchange.Redis/blob/main/src/StackExchange.Redis/RedisDatabase.cs中的 ScriptEvalMessage:GetMessages