目前 .NET 使用访问 Redis 的的类库主流应该是 StackExchange.Redis,自己参考网上的文章(也许是吃饱了撑着),也尝试做出简单的封装。
在 StackExchange.Redis 中最核心(中枢)的是 ConnectionMultiplexer 类,在所有调用之间它的实例对象应该被设计为在整个应用程序域中为共享和重用的,并不应该为每一个操作都创建一个 ConnectionMultiplexer 对象实例,也就是说我们可以使用常见的单例模式进行创建。
虽然 ConnectionMultiplexer 实现了 IDisposable 接口,但这并不意味着需要使用 using 进行释放,因为创建一个 ConnectionMultiplexer 对象是十分昂贵的 , 所以最好的是我们一直重用一个 ConnectionMultiplexer 对象。
/// <summary> /// 连接字符串 /// </summary> private static readonly string ConnectionString; /// <summary> /// redis 连接对象 /// </summary> private static readonly IConnectionMultiplexer ConnMultiplexer; /// <summary> /// 默认的 Key 值(用来当作 RedisKey 的前缀) /// </summary> private static readonly string DefaultKey; /// <summary> /// 锁 /// </summary> private static readonly object Locker = new object(); /// <summary> /// 数据库 /// </summary> private readonly IDatabase _db; /// <summary> /// 获取 Redis 连接对象 /// </summary> /// <returns></returns> public IConnectionMultiplexer GetConnectionRedisMultiplexer() { if ((ConnMultiplexer == null) || !ConnMultiplexer.IsConnected) { lock (Locker) { if ((ConnMultiplexer == null) || !ConnMultiplexer.IsConnected) ConnectionMultiplexer.Connect(ConnectionString); } } return ConnMultiplexer; }
我选择让这些静态变量的字段在静态构造函数中进行统一的初始化,如连接字符串,ConnectionMultiplexer 对象和注册事件等。
#region 构造函数 static RedisHelper() { ConnectionString = ConfigurationManager.ConnectionStrings["RedisConnectionString"].ConnectionString; ConnMultiplexer = ConnectionMultiplexer.Connect(ConnectionString); DefaultKey = ConfigurationManager.AppSettings["Redis.DefaultKey"]; AddRegisterEvent(); //添加注册事件 } public RedisHelper(int db = -1) { _db = ConnMultiplexer.GetDatabase(db); } #endregion 构造函数
这里的 Redis.DefaultKey 和 RedisConnectionString 对应配置文件中 App.Config。
DefaultKey(默认 Key)的作用是给 redisKey 值添加一个前缀,我这里使用了命名空间作为了前缀,在 Redis 可视化工具中可以更直观的进行显示。
存储字符串值。所有的同步方法都带有对应的异步方法,所以也进行了简单的封装。比较常用的应该是字符串操作,直接将 value 序列化存放到 redis 中。
哈希是一个 string 类型的 field 和 value 的映射表,哈希特别适合用于存储对象。
列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。
有序集合成员是唯一的,这就意味着集合中不能出现重复的数据。
一般会使用第三方的 MQ,如 RabbitMQ。
这里使用了二进制序列化器进行序列化操作。
/// <summary> /// 添加 Key 的前缀 /// </summary> /// <param name="key"></param> /// <returns></returns> private static string AddKeyPrefix(string key) { return $"{DefaultKey}:{key}"; } /// <summary> /// 序列化 /// </summary> /// <param name="obj"></param> /// <returns></returns> private static byte[] Serialize(object obj) { if (obj == null) return null; var binaryFormatter = new BinaryFormatter(); using (var memoryStream = new MemoryStream()) { binaryFormatter.Serialize(memoryStream, obj); var data = memoryStream.ToArray(); return data; } } /// <summary> /// 反序列化 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="data"></param> /// <returns></returns> private static T Deserialize<T>(byte[] data) { if (data == null) return default(T); var binaryFormatter = new BinaryFormatter(); using (var memoryStream = new MemoryStream(data)) { var result = (T)binaryFormatter.Deserialize(memoryStream); return result; } }
测试代码:
下载说明
☉本站所有源码和资源均由站长亲自测试-绝对保证都可以架设,运营!
☉如源码和资源有损坏或所有链接均不能下载,请告知管理员,
☉本站软件和源码大部分为站长独资,资源购买和收集,放心下载!
☉唯一站长QQ:1004003180 [人格担保-本站注重诚信!]
☉购买建议E-mail:1004003180@qq.com 源码收购 E-mail:1004003180@qq.com
☉本站文件解压密码 【文章内都自带解压密码,每个密码不同!】