可以使用 LuaScript 类来实现更复杂Lua脚本。LuaScript 类使脚本的编写和参数的提交更加简单,并且允许你使用更清晰的变量名。

    LuaScript 类重写了脚本中形式为:的变量,使之以符合 ARGV[someIndex] 的需要。如果传递的参数是 RedisKey 类型,它会自动的作为 KEYS 集合的一部分发送。

    • int(?)
    • long(?)
    • double(?)
    • string
    • byte[]
    • RedisKey
    • RedisValue

    为了避免重新发送Lua脚本到Redis,通过调用 LuaScript.Load(IServer) 方法可以将 LuaScript 对象转换为 LoadedLuaScriptLoadedLuaScript 可以执行 EVALSHA 命令(在脚本比较长的情况下,如果每次调用脚本都需要将整个脚本传给Redis会占用较多的带宽。为了解决这个问题,Redis提供了EVALSHA命令,允许开发者通过脚本内容的SHA1摘要来执行脚本,该命令的用法和EVAL一样,只不过是将脚本内容替换成脚本内容的SHA1摘要。)。

    1. using (ConnectionMultiplexer conn = /* init code */)
    2. var db = conn.GetDatabase(0);
    3. var server = conn.GetServer(/* appropriate parameters*/);
    4. var prepared = LuaScript.Prepare(Script);
    5. var loaded = prepared.Load(server);
    6. }

    LuaScriptLoadedLuaScript 的所有方法都有异步方法(*Async)的实现,我们可以调用Evaluate/EvaluateAsync方法把 ExecutableScript 属性的值(Lua脚本)提交到Redis。