• 【译】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

  • 相关阅读:
    Mysql开启日志
    amfphp传递负数的bug
    linux /var/spool/clientmqueue 目录占大量空间
    WinXP SSH连接不上虚拟机的解决方法
    批量数据替换助手V1.0版发布
    也谈反射的应用场景
    反射+特性打造简洁的AJAX调用
    文本处理之利器正则表达式闪亮登场
    关于缩略图的生成与访问策略的一些经验分享
    装饰模式个人的一些理解
  • 原文地址:https://www.cnblogs.com/liang24/p/13847258.html
Copyright © 2020-2023  润新知