StackExchange.Redis通用封装类分享(转)

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介:

  前两天朋友问我,有没有使用过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最中枢的对象。这个类的实例需要被整个应用程序域共享和重用的,所以不需要在每个操作中不停的创建该对象的实例,一般都是使用单例来创建和存放这个对象,这个在官网上也有说明。

 

  RedisHelper 通用操作类封  

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

 

  String类型的封装

 

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

  List类型的封装

  Hash类型的封装

  SortedSet 类型的封装

  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

 

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


本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/p/6214089.html,如需转载请自行联系原作者

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
4月前
|
NoSQL PHP Redis
PHP Redis 封装
PHP Redis 封装
17 0
|
5月前
|
NoSQL 关系型数据库 MySQL
Docker-compose封装mysql和redis并初始化数据
Docker-compose封装mysql和redis并初始化数据
132 0
|
3月前
|
NoSQL Go Redis
Golang实现redis系列-(3)封装RESP协议
Golang实现redis系列-(3)封装RESP协议
36 0
|
1月前
|
缓存 NoSQL Java
springboot中集成redis,二次封装成工具类
springboot中集成redis,二次封装成工具类
174 0
|
3月前
|
NoSQL Go Redis
Golang实现redis系列-(1)日志组件的封装
Golang实现redis系列-(1)日志组件的封装
30 0
|
8月前
|
NoSQL PHP Redis
PHP Redis 封装
PHP Redis 封装
62 0
|
消息中间件 监控 NoSQL
你不知道的redis五-redis进阶,第三方jar没有封装的命令我们该怎么执行?
你不知道的redis五-redis进阶,第三方jar没有封装的命令我们该怎么执行?
97 0
|
缓存 NoSQL 前端开发
|
NoSQL 安全 Java
Redis之Jedis简单封装
Redis之Jedis简单封装
2656 0
|
NoSQL Java Redis
基于Redis的Spring Boot 幂等性插件模块封装
[基于Redis支持集群、哨兵等模式]
332 0

热门文章

最新文章