文件名称:
Redis的.net客户端StackExchange.Redis.zip
开发工具:
文件大小: 8mb
下载次数: 0
上传时间: 2019-07-19
详细说明: StackExchange.Redis,这是redis 的.net客户端之一。Redis是一个开源的内存数据存储,可以用来做数据库,缓存或者消息代理服务。目前有不少人在使用 ServiceStack.Redis这个.net客户端,但是这个的最新版本目前已经变成了商业软件。对于 ServiceStack.Redis这种行为,我们没有什么好说的,留给我们的选择是使用低版本的开源版本或者转向其他的客户端。要说到StackExchange.Redis,就不得不说它和BookSleeve的关系。BookSleeve已经是比较完善的redis sdk,但是为什么 BookSleeve 的作者要重新写一个redis 的客户端sdk呢? 有兴趣的同学可以看这里 why i wrote another redis client归纳起来其实就一句话:觉得不爽就推倒重来。StackExchange.Redis 安装直接命令或者手动NuGet。 PM> Install-Package StackExchange.Redis 如果需要强签名的版本走下面的命令,当然作者对于强签名的事也是充满了 怨念 PM> Install-Package StackExchange.Redis.StrongName ConnectionMultiplexerConnectionMultiplexer对象是StackExchange.Redis最中枢的对象。这个类的实例需要被整个应用程序域共享和重用的,你不要在每个操作中不停的创建该对象的实例,所以使用单例来创建和存放这个对象是必须的。public static ConnectionMultiplexer Manager { get { if (_redis == null) { lock (_locker) { if (_redis != null) return _redis; _redis = GetManager(); return _redis; } } return _redis; } } private static ConnectionMultiplexer GetManager(string connectionString = null) { if (string.IsNullOrEmpty(connectionString)) { connectionString = GetDefaultConnectionString(); } return ConnectionMultiplexer.Connect(connectionString); }虽然ConnectionMultiplexer是实现了IDisposable接口的,但是我们基于重用的考虑,一般不需要去释放它。当作内存数据库使用IDatabase db = redis.GetDatabase(); 这里的GetDatabase() 返回的db对象是很轻量级别的,不需要被缓存起来,每次用每次拿即可。IDatabase 的所有方法都有同步和异步的实现。其中的异步实现都是可以await的。一些基础的操作的封装。public bool Remove(string key) { key = MergeKey(key); var db = RedisManager.Manager.GetDatabase(Database); return db.KeyDelete(key); } public string Get(string key) { key = this.MergeKey(key); var db = RedisManager.Manager.GetDatabase(Database); return db.StringGet(key); } public bool Set(string key, string value, int expireMinutes = 0) { key = MergeKey(key); var db = RedisManager.Manager.GetDatabase(Database); if (expireMinutes > 0) { db.StringSet(key, value, TimeSpan.FromMinutes(expireMinutes)); } else { db.StringSet(key, value); } return db.StringSet(key, value); } public bool HasKey(string key) { key = MergeKey(key); var db = RedisManager.Manager.GetDatabase(Database); return db.KeyExists(key); } 这里的 MergeKey用来拼接 Key的前缀,具体不同的业务模块使用不同的前缀。这里有个和 ServiceStack.Redis大的区别是没有默认的连接池管理了。没有连接池自然有其利弊,最大的好处在于等待获取连接的等待时间没有了,也不会因为连接池里面的连接由于没有正确释放等原因导致无限等待而处于死锁状态。缺点在于一些低质量的代码可能导致服务器资源耗尽。不过提供连接池等阻塞和等待的手段是和作者的设计理念相违背的。StackExchange.Redis这里使用管道和多路复用的技术来实现减少连接,这里后续展开再讨论。当作消息代理中间件使用消息组建中,重要的概念便是生产者,消费者,消息中间件。ISubscriber sub = redis.GetSubscriber(); 首先,先拿到一个ISubscriber对象。在生产者端我们发布一条消息:sub.Publish("messages", "hello"); ,在消费者端得到该消息并输出sub.Subscribe("messages", (channel, message) => { Console.WriteLine((string)message); }); 一般使用更专业的消息队列来处理这种业务场景,因此这里就略过了。三种命令模式Sync vs Async vs Fire-and-Forget最后,这里有三种命令模式分别对应 StackExchange.Redis的三类不同的使用场景。Sync,同步模式会直接阻塞调用者,但是显然不会阻塞其他线程。Async,异步模式直接走的是Task模型。Fire-and-Forget,就是发送命令,然后完全不关心最终什么时候完成命令操作。db.StringIncrement(pageKey, flags: CommandFlags.FireAndForget); 这里值得注意的是,在Fire-and-Forget模式下,所有命令都会立即得到返回值,当然该值都是该返回值类型的默认值,比如操作返回类型是bool将会立即得到false,因为false = default(bool)。 标签:.net redis
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
相关搜索: