【译】StackExchange.Redis 中文文档(十一)脚本

Scripting

IServer.ScriptLoad(Async), IServer.ScriptExists(Async), IServer.ScriptFlush(Async), IDatabase.ScriptEvaluateIDatabaseAsync.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 });
	}

LuaScriptLoadedLuaScript 上的所有方法都具有 Async 替代方法,并将提交给 redis 的实际脚本公开为 ExecutableScript 属性。

原文地址:Scripting

posted @ 2020-10-20 16:31  大杂草  阅读(502)  评论(0编辑  收藏  举报