前面几篇博客基本把redis基本操作学习了下,但一些高级应用并没有写进博客,例如持久化、虚拟内存等,像这些主要是通过配置文件来解决的,运维方向可能更侧重一些,对于开发者来说,可能就想知道怎么用C#来和Redis服务器打交道,今天使用的ServiceStack就是用来做这事的。
一、引入ServiceStack
通过NuGET搜索ServiceStack,安装之后会有4个dll,如下图
二、启动Redis服务
这里按照上一篇博客主从复制的结果搭建Redis服务器。6379的是主服务器,6380的是从服务器。图我就不截了,上篇博客中已经有了。
三、封装帮助类
关于ServiceStack的帮助类也挺多的,我在这博客贴出来的类也是从网上搜的,只是在它的基础上进行了下修改,比如配置RedisConfig.cs文件,我这里直接返回一个定值,这主要是测试,如果在开发中,应该写在配置文件中。这里我新建了一个RedisHelper的文件夹来存放这些帮助类。
1.配置文件 主要配置服务器的一些参数 读写服务器地址 最大的读写数量等
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Configuration; namespace RedisHelper { RedisConfig : ConfigurationSection { WriteServerConStr{ get { ,,); } } ReadServerConStr { get { , ); } } MaxWritePoolSize { get { return 50; } } MaxReadPoolSize { get { return 200; } } AutoStart { get { return true; } } } }
View Code2.RedisManager管理类 主要管理维护服务端访问类
using ServiceStack.Redis; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace RedisHelper { public class RedisManager { private static PooledRedisClientManager prcm; 静态构造方法,初始化链接池管理对象 RedisManager() { CreateManager(); } 创建链接池管理对象 CreateManager() { ); ); prcm = new PooledRedisClientManager(ReadServerConStr, WriteServerConStr, new RedisClientManagerConfig { MaxWritePoolSize = RedisConfig.MaxWritePoolSize, MaxReadPoolSize = RedisConfig.MaxReadPoolSize, AutoStart = RedisConfig.AutoStart, }); } [] SplitString(string strSource, string split) { return strSource.Split(split.ToArray()); } 客户端缓存操作对象 IRedisClient GetClient() { if (prcm == null) CreateManager(); return prcm.GetClient(); } } }
View Code3.RedisBase类 字符串、List等操作类的基类
using ServiceStack.Redis; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace RedisHelper { RedisBase类,是redis操作的基类,继承自IDisposable接口,主要用于释放内存 RedisBase : IDisposable { ; } private bool _disposed = false; static RedisBase() { Core = RedisManager.GetClient(); } Dispose(bool disposing) { if (!this._disposed) { if (disposing) { Core.Dispose(); Core = null; } } this._disposed = true; } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } 保存数据DB文件到硬盘 Save() { Core.Save(); } 异步保存数据DB文件到硬盘 SaveAsync() { Core.SaveAsync(); } } }
View Code4.字符串、List、Hash等操作类
(1)string操作类