【发布时间】:2015-10-10 11:15:57
【问题描述】:
我正在尝试在 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);
然后保留 LoadedLuaScript 供以后使用(与 ConnectionMultiplexer 一起)。 然后当我想运行 Lua 脚本时:
IDatabase db = redis.GetDatabase();
db.ScriptEvaluate(loadedScript);
这是正确的方法吗?
由于 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;
【问题讨论】:
-
到目前为止,您有没有得到任何推荐的解决方案?
-
嘿任何更新。 @PankajRawat
-
@aasis21 我放弃了使用 redis 的 Lua 脚本,但我会推荐 redisgreen.net/blog/intro-to-lua-for-redis-programmers
-
@ziv 你有这方面的更新吗?
-
由于所有 lua 脚本都在内存中并且不会在节点之间复制,因此我认为加载脚本并将其称为 Willy-nilly 是危险的,特别是因为 StackExchange.Redis 似乎使用 EVALSHA 调用。我会考虑在执行脚本之前加载它是最好的解决方案; lua 文件的大小应该小到可以忽略,除非延迟很重要。
标签: lua stackexchange.redis azure-redis-cache