C# 通过ServiceStack 操作Redis
作 者:明志德道
1.引用Nuget包 ServiceStack.Redis
我这里就用别人已经封装好的Reids操作类来和大家一起参考了下,看看怎么使用ServiceStack.Redis操作Redis数据
RedisConfigInfo--redis配置文件信息
//////redis配置文件信息 ///也可以放到配置文件去 /// publicsealedclassRedisConfigInfo { //////可写的Redis链接地址 ///format:ip1,ip2 /// ///默认6379端口 /// publicstringWriteServerList="127.0.0.1:6379"; //////可读的Redis链接地址 ///format:ip1,ip2 /// publicstringReadServerList="127.0.0.1:6379"; //////最大写链接数 /// publicintMaxWritePoolSize=60; //////最大读链接数 /// publicintMaxReadPoolSize=60; //////本地缓存到期时间,单位:秒 /// publicintLocalCacheTime=180; //////自动重启 /// publicboolAutoStart=true; //////是否记录日志,该设置仅用于排查redis运行时出现的问题, ///如redis工作正常,请关闭该项 /// publicboolRecordeLog=false; }
RedisManager--Redis管理中心 创建Redis链接
//////Redis管理中心创建Redis链接 /// publicclassRedisManager { //////redis配置文件信息 /// privatestaticRedisConfigInfoRedisConfigInfo=newRedisConfigInfo(); //////Redis客户端池化管理 /// privatestaticPooledRedisClientManagerprcManager; //////静态构造方法,初始化链接池管理对象 /// staticRedisManager() { CreateManager(); } //////创建链接池管理对象 /// privatestaticvoidCreateManager() { string[]WriteServerConStr=RedisConfigInfo.WriteServerList.Split(','); string[]ReadServerConStr=RedisConfigInfo.ReadServerList.Split(','); prcManager=newPooledRedisClientManager(ReadServerConStr,WriteServerConStr, newRedisClientManagerConfig { MaxWritePoolSize=RedisConfigInfo.MaxWritePoolSize, MaxReadPoolSize=RedisConfigInfo.MaxReadPoolSize, AutoStart=RedisConfigInfo.AutoStart, }); } //////客户端缓存操作对象 /// publicstaticIRedisClientGetClient() { returnprcManager.GetClient(); } }
RedisBase--是redis操作的基类,继承自IDisposable接口,主要用于释放内存
//////RedisBase类,是redis操作的基类,继承自IDisposable接口,主要用于释放内存 /// publicabstractclassRedisBase:IDisposable { publicIRedisClientiClient{get;privateset;} //////构造时完成链接的打开 /// publicRedisBase() { iClient=RedisManager.GetClient(); } //publicstaticIRedisClientiClient{get;privateset;} //staticRedisBase() //{ //iClient=RedisManager.GetClient(); //} privatebool_disposed=false; protectedvirtualvoidDispose(booldisposing) { if(!this._disposed) { if(disposing) { iClient.Dispose(); iClient=null; } } this._disposed=true; } publicvoidDispose() { Dispose(true); GC.SuppressFinalize(this); } publicvoidTranscation() { using(IRedisTransactionirt=this.iClient.CreateTransaction()) { try { irt.QueueCommand(r=>r.Set("key",20)); irt.QueueCommand(r=>r.Increment("key",1)); irt.Commit();//提交事务 } catch(Exceptionex) { irt.Rollback(); throwex; } } } //////清除全部数据请小心 /// publicvirtualvoidFlushAll() { iClient.FlushAll(); } //////保存数据DB文件到硬盘 /// publicvoidSave() { iClient.Save();//阻塞式save } //////异步保存数据DB文件到硬盘 /// publicvoidSaveAsync() { iClient.SaveAsync();//异步save } }
RedisStringService--String类型操作帮助类
//////key-value键值对:value可以是序列化的数据 /// publicclassRedisStringService:RedisBase { #region赋值 //////设置key的value /// publicboolSet(stringkey,Tvalue) { //iClient.Db=2; returnbase.iClient.Set (key,value); } /// ///设置key的value并设置过期时间 /// publicboolSet(stringkey,Tvalue,DateTimedt) { //iClient.Db=2; returnbase.iClient.Set (key,value,dt); } /// ///设置key的value并设置过期时间 /// publicboolSet(stringkey,Tvalue,TimeSpansp) { //iClient.Db=2; returnbase.iClient.Set (key,value,sp); } /// ///设置多个key/value可以一次保存多个keyvalue---多个keyvalue不是分多次,是一个独立的命令; /// publicvoidSet(Dictionarydic) { //iClient.Db=2; base.iClient.SetAll(dic); } #endregion #region追加 /// ///在原有key的value值之后追加value,没有就新增一项 /// publiclongAppend(stringkey,stringvalue) { returnbase.iClient.AppendToValue(key,value); } #endregion #region获取值 //////获取key的value值 /// publicstringGet(stringkey) { returnbase.iClient.GetValue(key); } //////获取多个key的value值 /// publicListGet(List keys) { returnbase.iClient.GetValues(keys); } /// ///获取多个key的value值 /// publicListGet (List keys) { returnbase.iClient.GetValues (keys); } #endregion #region获取旧值赋上新值 /// ///获取旧值赋上新值 /// publicstringGetAndSetValue(stringkey,stringvalue) { returnbase.iClient.GetAndSetValue(key,value); } #endregion #region辅助方法 //////获取值的长度 /// publiclongGetLength(stringkey) { returnbase.iClient.GetStringCount(key); } //////自增1,返回自增后的值保存的是10调用后,+1返回11 /// publiclongIncr(stringkey) { returnbase.iClient.IncrementValue(key); } //////自增count,返回自增后的值自定义自增的步长值 /// publiclongIncrBy(stringkey,intcount) { returnbase.iClient.IncrementValueBy(key,count); } //////自减1,返回自减后的值,Redis操作是单线程操作;不会出现超卖的情况 /// publiclongDecr(stringkey) { returnbase.iClient.DecrementValue(key); } //////自减count,返回自减后的值 /// ////// /// publiclongDecrBy(stringkey,intcount) { returnbase.iClient.DecrementValueBy(key,count); } #endregion }
nuget包是外国人写的,在国内并没有完整的中文文档,也没有专门的人来翻译、封装它,所以上面的代码方法不是很全,还有很多api方法需要自己去官网找然后自己封装。
在这里,上面的封装我就放一边,还是给大家演示ServiceStack原生的API如何使用
2.string类型的使用
publicstaticRedisClientclient=newRedisClient("127.0.0.1",6379); //1.存入键值对 boola=client.Set("key_name","value_11"); //2.根据key获取值 stringdata1=client.GetValue("key_name"); //3.在原有的value上进行追加 longdata2=client.AppendToValue("key_name","value_11"); //4.获取值的长度 vardata3=client.GetStringCount("key_name"); //5.数值自增/减,返回自增、自减后的值 client.Set("小明分数",100); //自增20,可以自增负值 vardata4=client.IncrementValueBy("小明分数",20); //自减50 vardata5=client.DecrementValueBy("小明分数",50); //6.插入实体和读取实体 UserInfouserInfo=newUserInfo(){Id=3,Age=50,Name="zxl",Pwd="123456"}; client.Set("UserInfo_Id_3",userInfo); UserInfodata6=client.Get("UserInfo_Id_3"); //7.一次性添加多个key-value集合 Dictionary dic=newDictionary (){ {"101",Guid.NewGuid().ToString("N")}, {"102",Guid.NewGuid().ToString("N")}, {"103",Guid.NewGuid().ToString("N")}, {"104",Guid.NewGuid().ToString("N")}, {"105",Guid.NewGuid().ToString("N")}, {"106",Guid.NewGuid().ToString("N")} }; client.SetAll(dic); //8.获取多个key的value值集合 List keys=newList (){"101","103","105"}; List data8=client.GetValues(keys);
//9.重命名key client.Rename("106","1066"); //10.设置key的过期时间(30秒后自动销毁) boolb2=client.Expire("102",30); //11.删除单个key boold1=client.Remove("101");//删除成功,返回true boold2=client.Remove("ffff");//删除不存在的数据,返回false
//13.清除全部数据请小心 client.FlushAll();
以上就是C#通过ServiceStack操作Redis的详细内容,更多关于C#ServiceStack操作Redis的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。