腳本應該加載一次,在啓動,並保持LoadedLuaScript情況需要時評估。 StackExchange.Redis不會將LoadedLuaScripts緩存到任何地方,因此如果您在每次調用時都要經過準備和加載過程,那麼您只需要使用StackExchange.Redis將該腳本轉移到Redis,在Redis中它將被散列,Redis會意識到,它已經擁有它,然後通過哈希回來。
如果你的進程無法啓動頻繁(對於一些經常值),那麼它可能是合理的,在啓動時加載的所有腳本,即使它們已經加載的Redis不已,因爲它不會導致多這些腳本的實例在Redis中緩存。你可以保持LoadedLuaScripts提供一個簡單的緩存,如:
private static readonly string _helloScript =
"print(\"Hello World!\")"
;
public void LoadScripts(IDatabase db, IServer srv)
{
var scripts = new Dictionary<string, string>
{
{ "sayHello", _helloScript },
};
foreach (var scriptName in scripts.Keys)
{
var prepped = LuaScript.Prepare(scripts[scriptName]);
_scripts.Add(scriptName, prepped.Load(srv));
}
}
public void SayHello(IDatabase db)
{
_scripts["sayHello"].Evaluate(db);
}