Scripting
IServer.ScriptLoad(Async)
, IServer.ScriptExists(Async)
, IServer.ScriptFlush(Async)
, IDatabase.ScriptEvaluate
和 IDatabaseAsync.ScriptEvaluateAsync
方法支持基础的 Lua scripting.
这些方法公开了提交和执行 Lua 脚本以进行 redis 所需的基本命令。
可通过 LuaScript
类获得更复杂的脚本。通过 LuaScript
类,可以更轻松地准备和提交参数以及脚本,并允许你使用更简洁的变量名称。
使用 LuaScript
的示例:
const string Script = "redis.call('set', @key, @value)";
using (ConnectionMultiplexer conn = /* init code */)
{
var db = conn.GetDatabase(0);
var prepared = LuaScript.Prepare(Script);
db.ScriptEvaluate(prepared, new { key = (RedisKey)"mykey", value = 123 });
}
LuaScript
类将形式为 @myVar
的脚本中的变量重写为 redis 所需的适当的 ARGV [someIndex]
。如果传递的参数类型为 RedisKey
,它将作为 KEYS
集合的一部分自动发送。
公开与 Lua 脚本中 @ 前缀变量同名的字段或属性成员的任何对象都可以用作参数哈希
评估调用。支持的成员类型如下:
- int(?)
- long(?)
- double(?)
- string
- byte[]
- bool(?)
- RedisKey
- RedisValue
为了避免每次评估时都将 Lua 脚本重新传输给 redis,可以通过 LuaScript.Load(IServer)
将 LuaScript
对象转换为 LoadedLuaScript
。用 EVALSHA
评估 LoadedLuaScripts
,并由哈希引用。
使用 LoadedLuaScript
的示例:
const string Script = "redis.call('set', @key, @value)";
using (ConnectionMultiplexer conn = /* init code */)
{
var db = conn.GetDatabase(0);
var server = conn.GetServer(/* appropriate parameters*/);
var prepared = LuaScript.Prepare(Script);
var loaded = prepared.Load(server);
loaded.Evaluate(db, new { key = (RedisKey)"mykey", value = 123 });
}
LuaScript
和 LoadedLuaScript
上的所有方法都具有 Async 替代方法,并将提交给 redis 的实际脚本公开为 ExecutableScript
属性。
原文地址:Scripting