zoukankan      html  css  js  c++  java
  • StackExchange.Redis通用封装类分享

    http://www.cnblogs.com/qtqq/p/5951201.html

    StackExchange.Redis通用封装类分享

     

      前两天朋友问我,有没有使用过StackExchange.Redis,问我要个封装类,由于之前都是使用ServiceStack.Redis,由于ServiceStack.Redis v4版本后是收费版的,所以现在也很有公司都在使用StackExchange.Redis而抛弃ServiceStack.Redis了。其实个人觉得,两个驱动都不错,只是由于ServiceStack.Redis收费导致目前很多公司都是基于V3版本的使用,也有人说V3版本有很多Bug,没有维护和升级,不过至少目前我是没发现Bug。

      不过ServiceStack.Redis同StackExchange.Redis比较,抛开收费的来说,确认比StackExchange.Redis 更有优势。StackExchange.Redis文档很少,更不要说国内的文档了,连github上面对应的介绍文档都是很片面,这点我真的觉得StackExchange.Redis的作者至少要完善下文档,很多都是要看源码的例子才有。网上对StackExchange.Redis的使用例子也比ServiceStack.Redis少得多,不是说没人用,只是我查来查去,大部分都是基于String类型的数据进行使用的封装类,对于List,SortedSet,Hash的封装操作都很少,基本都是东写一点,西写一点,很难找到完整的。在参考了一些文章和源码后,这里提供一个自己封装的类,基本提供对于各种类型的使用封装,提供给大家学习使用,如果有哪里写的不好的,大家也可以互相交流。

     

      ConnectionMultiplexer 封装

      首先是 ConnectionMultiplexer 的封装,ConnectionMultiplexer对象是StackExchange.Redis最中枢的对象。这个类的实例需要被整个应用程序域共享和重用的,所以不需要在每个操作中不停的创建该对象的实例,一般都是使用单例来创建和存放这个对象,这个在官网上也有说明。

    
    
     ConnectionMultiplexer帮助类

      RedisHelper 通用操作类封  

     RedisHelper
      其中CustomKey用来表示系统前缀,AddSysCustomKey方法对每个key都进行前缀的添加处理,这里推荐大家在命名redis的key的时候最好的加上前缀,并且使用 :来分割前缀 ,这里在使用可视化工具查看的时候就比较好区分,比如我的的前缀是 Demo:test:(一般是  系统名:业务名:,然后你查看的时候你会发现整齐,好区分了很多

     

      String类型的封装

     String

     

      这里说一下,StackExchange.Redis 中对对象的存储是不自带序列化和反序列化的方法,所以在ConvertJson和ConvertObj里面我是使用了JsonConvert来操作,如果需要换成其他的序列化和序列化,直接修改这两个方面就好了,另外,StackExchange.Redis 相对于ServiceStack.Redis 来说提供了异步的方法,所以这里也同样封装了异步和同步的方法。

      List类型的封装

     List

      Hash类型的封装

     Hash

      SortedSet 类型的封装

     SortedSet

      key的管理

     Key

      发布和订阅

     发布订阅

      其他

    复制代码
     1  #region 其他
     2 
     3         public ITransaction CreateTransaction()
     4         {
     5             return GetDatabase().CreateTransaction();
     6         }
     7 
     8         public IDatabase GetDatabase()
     9         {
    10             return _conn.GetDatabase(DbNum);
    11         }
    12 
    13         public IServer GetServer(string hostAndPort)
    14         {
    15             return _conn.GetServer(hostAndPort);
    16         }
    17 
    18         /// <summary>
    19         /// 设置前缀
    20         /// </summary>
    21         /// <param name="customKey"></param>
    22         public void SetSysCustomKey(string customKey)
    23         {
    24             CustomKey = customKey;
    25         }
    26 
    27         #endregion 其他
    复制代码

      以上就是对StackExchange.Redis基本操作的通用封装,提供给大家学习参考,如果有哪里写错的,也希望能一起交流。

      问题:

      StackExchange.Redis没有提供Redis分布式锁的操作么?ServiceStack.Redis 提供了AcquireLock 的方法来操作,StackExchange.Redis 源码中只找到了LockTake的方法,并没有找到其他的方法了,如果有人使用过,还希望能提供下。

      最后,附上源码地址:https://github.com/qq1206676756/RedisHelp

  • 相关阅读:
    [luogu P2184] 贪婪大陆 [树状数组][线段树]
    luogu P3373 【模板】线段树 2
    [luogu P3384] 【模板】树链剖分 [树链剖分]
    树链剖分膜版
    AtCoder Grand Contest 026F
    AtCoder Regular Contest 091F
    AtCoder Regular Contest 099F
    AtCoder Grand Contest 027D
    向量叉积分配律简单证明
    LOJ 538. 「LibreOJ NOIP Round #1」数列递推(找规律+结论)
  • 原文地址:https://www.cnblogs.com/Jeely/p/10785206.html
Copyright © 2011-2022 走看看