zoukankan      html  css  js  c++  java
  • 【译】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

  • 相关阅读:
    1001.A+B Format(20)
    大一下学期的自我目标
    re模块3
    re模块2
    re模块
    configParser模块
    logging模块
    hashlib模块
    sys模块
    isinstance函数
  • 原文地址:https://www.cnblogs.com/liang24/p/13847258.html
Copyright © 2011-2022 走看看