【译】StackExchange.Redis中文使用文档--脚本

脚本

IServer.ScriptLoad(Async)IServer.ScriptExists(Async)IServer.ScriptFlush(Async)IDatabase.ScriptEvaluateIDatabaseAsync.ScriptEvaluateAsync 这些方法为基本的 Lua脚本 提供了支持。
这些方法暴露了向Redis提交和执行Lua脚本所需的基本命令。

通过 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 集合的一部分自动发送。

Any object that exposes field or property members with the same name as @-prefixed variables in the Lua script can be used as a parameter hash to
Evaluate calls.

任何在Lua脚本中暴露的以@为前缀变量同名的字段或属性成员的对象都可以用作参数哈希 Evaluate 调用。

支持的成员类型如下:

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

为了避免在每次评估时重新传输Lua脚本到redis,LuaScript 对象可以通过 LuaScript.Load(IServer) 转换为 LoadedLuaScript
LoadedLuaScripts 使用 EVALSHA 求值,并由 hash 引用。

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 属性。

查看原文

More

作者水平有限,若有疏漏或错误还望提醒,十分感谢。

您可以在这里 提出问题

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,967评论 19 139
  • 1.1 资料 ,最好的入门小册子,可以先于一切文档之前看,免费。 作者Antirez的博客,Antirez维护的R...
    JefferyLcm阅读 17,120评论 1 51
  • 22年12月更新:个人网站关停,如果仍旧对旧教程有兴趣参考 Github 的markdown内容[https://...
    tangyefei阅读 35,231评论 22 257
  • 本文将从Redis的基本特性入手,通过讲述Redis的数据结构和主要命令对Redis的基本能力进行直观介绍。之后概...
    kelgon阅读 61,272评论 23 625
  • 前言 多说是一款社会化评论系统,它改变了网站与用户之间,用户与用户之间的互动方式。当然Disqus在大家心目中可能...
    风澈vio阅读 509评论 0 62