2016-06-23 4 views
0

私はredis-cliでテストした中複雑なLUAスクリプトを持っています。使い方:StackExchange Redis C#LUAスクリプトを実行する方法 - より実践的な例が必要

EVALSHA sha1 numkeys key1..keyn arg1..arg2

私のスクリプトには2つの引数なしの鍵を取ります。

私はその後LuaScriptオブジェクトを作成するために

LuaScript lua = LuaScript.Prepare(luaString) を使用して、string luaStringにテキストファイルから.NET側のスクリプトをロードしています。ここまでは順調ですね?

今私が作成します。

object luaParams = new { '1923920', '{ "type":"message", "property1":"this is an example" }' }; 

RedisResult r = lua.Evaluate(IDatabase, luaParams);

は、例外をスローします:

追加情報:スクリプトを実行しているERRエラー( f_a14d7a96f7556c52775eb277db66dfe0bfadd6a5に呼び出す):@user_script:37: @ user_script:37:Lua redis()のコマンド引数は文字列か、 の整数でなければなりません

私はgithub scripting.mdを見てきましたが、その例は私のシナリオには対応していないようです。

私には何が欠けていますか?私は引用符付きの引用符で囲まれていないluaParamsを試して、キーがない場合は0を追加しました。

答えて

0

は、ここで私は...それをやった方法です(私は正確に提供することはできませんので、中に混入し、いくつかの擬似コードで - それは十分なコンテキストを欠い)

string actualScript = File(pathToFullLuaScriptOnDotNetServer).ReadToEnd(); 
string luaSha = rClient.CalculateSha1(actualScript); 

//This current impl is not optimized - should do this in AppStart 
bool hasScript = rClient.HasLuaScript(luaSha); 
if (!hasScript) 
{ 
    luaSha = rClient.LoadLuaScript(CommWebAPI.RedisConfig.scriptString); 
} 

...

string geom = f["geometry"].ToString(); 
string[] p = new string[] { integerParam + "", geom.StripNewLines() }; 
List<string> result = rClient.ExecLuaShaAsList(luaSha, p); 
//getLuaScriptError is a custom function - see below 
string luaError = getLuaScriptError(result); 
if (null == luaError) 
{ 
    aggregatedResults = aggregatedResults.Union(result).ToList(); 
} 
else 
{ 
    Debug.Print("Redis LUA error: " + luaError); 
} 

。 ..

private string getLuaScriptError(List<string> response) 
{ 
    //check if LUA error: 2 results, 0 == null, 1 == error message. 
    if (2 == response.Count) 
    { 
     if (null == response[0]) 
     { 
      return response[1]; 
     } 
    } 
    return null; 
} 
関連する問題