Redis之Hash___redis中哈希(Hash)在.net中的运用
一、下载redis安装文件redis-2.4.6-setup-32-bit.exe。这里一个32位的,本人现在用的XP系统,貌似影响不是很大。详情附件。
安装好之后在服务里面启动
二、用vs新建一个小程序,引用4个redis需要的dll文件,详情附件。
三、建一个RedisHelper类,引用4个dll。
publicclassRedisHelper:IDisposable{privatestaticstringstrRedis=System.Configuration.ConfigurationManager.AppSettings["RedisPath"].ToString();//web.config中配置我本机的一个IPpublicRedisClientRedis=newRedisClient(strRedis,6379);//缓存池PooledRedisClientManagerprcm=newPooledRedisClientManager();//默认缓存过期时间单位秒publicintsecondsTimeOut=30*60;///<summary>///缓冲池///</summary>///<paramname="readWriteHosts"></param>///<paramname="readOnlyHosts"></param>///<returns></returns>publicstaticPooledRedisClientManagerCreateManager(string[]readWriteHosts,string[]readOnlyHosts){returnnewPooledRedisClientManager(readWriteHosts,readOnlyHosts,newRedisClientManagerConfig{MaxWritePoolSize=readWriteHosts.Length*5,MaxReadPoolSize=readOnlyHosts.Length*5,AutoStart=true,});}///<summary>///构造函数///</summary>///<paramname="OpenPooledRedis">是否开启缓冲池</param>publicRedisHelper(boolOpenPooledRedis=false){if(OpenPooledRedis){prcm=CreateManager(newstring[]{strRedis+":6379"},newstring[]{strRedis+":6379"});Redis=prcm.GetClient()asRedisClient;}}#regionKey/Value存储///<summary>///设置缓存///</summary>///<typeparamname="T"></typeparam>///<paramname="key">缓存建</param>///<paramname="t">缓存值</param>///<paramname="timeout">过期时间,单位秒,-1:不过期,0:默认过期时间</param>///<returns></returns>publicboolSet<T>(stringkey,Tt,inttimeout=0){if(timeout>=0){if(timeout>0){secondsTimeOut=timeout;}Redis.Expire(key,secondsTimeOut);}returnRedis.Add<T>(key,t);}///<summary>///获取(根据key来获取value)///</summary>///<typeparamname="T"></typeparam>///<paramname="key"></param>///<returns></returns>publicTGet<T>(stringkey){returnRedis.Get<T>(key);}///<summary>///移除整个类型的key///</summary>///<paramname="key"></param>///<returns></returns>publicboolRemove(stringkey){returnRedis.Remove(key);}///<summary>///key是否存在(0:不存在;1;存在)///</summary>///<paramname="key"></param>///<returns></returns>publicintIsExists(stringkey){returnConvert.ToInt32(Redis.Exists(key));}publicboolAdd<T>(stringkey,Tt,inttimeout){if(timeout>=0){if(timeout>0){secondsTimeOut=timeout;}Redis.Expire(key,secondsTimeOut);}returnRedis.Add<T>(key,t);}#endregion///<summary>///释放资源///</summary>publicvoidDispose(){if(Redis!=null){Redis.Dispose();Redis=null;}GC.Collect();}#regionHash的方法///<summary>///判断某个数据是否已经被缓存///</summary>publicboolExist<T>(stringhashId,stringkey){returnRedis.HashContainsEntry(hashId,key);}///<summary>///存储数据到hash表///</summary>publicboolSet1<T>(stringhashId,stringkey,stringvalue){returnRedis.SetEntryInHash(hashId,key,value);}///<summary>///移除hash中的某值///</summary>publicboolRemove(stringhashId,stringkey){returnRedis.RemoveEntryFromHash(hashId,key);}///<summary>///从hash表获取数据///</summary>publicstringGet1<T>(stringhashId,stringkey){returnRedis.GetValueFromHash(hashId,key);}///<summary>///获取整个hash的数据///</summary>publicstringGetAll1(stringhashId){stringresult="";varlist=Redis.GetHashValues(hashId);if(list!=null&&list.Count>0){for(inti=0;i<list.Count;i++){varaa=list[i];result+=aa+",";}result=result.Trim(',');}returnresult;}///<summary>///设置缓存过期///</summary>publicvoidSetExpire(stringkey,DateTimedatetime){Redis.ExpireEntryAt(key,datetime);}#endregion}
四、再建一个ashx一般处理程序。
publicclassUserTest{publicintuserId{get;set;}publicstringuserName{get;set;}publicstringuserPwd{get;set;}publicintuserAge{get;set;}}publicclassRedisSelectTset1:IHttpHandler{publicvoidProce***equest(HttpContextcontext){context.Response.ContentType="text/plain";RedisHelperredis=newRedisHelper(true);UserTestuser=null;for(inti=0;i<10;i++){user=newUserTest(){userId=i,userName="admin"+i,userPwd="123456",userAge=20+i};varvalue=JsonSerializer.SerializeToString<UserTest>(user);//序列化json格式redis.Set1<byte>("userHash","user_Id"+i,value);//第一插入返回Ture,覆盖重复的返回Flash}stringgetAll=redis.GetAll1("userHash");//获得所有的数据DateTimedateTime=Convert.ToDateTime("2099-12-3100:00:00");//设置缓存过期时间redis.SetExpire("userHash",dateTime);context.Response.Write(getAll);}publicboolIsReusable{get{returnfalse;}}}
运行页面之后如何显示:
之后可以在cmd中打开客户端链接:hgetall userHash 根据key取出所有的value
就能在你的内存中看到你刚刚运行的页面保存的数据
根据redis的命令,可以去除单条数据,如何下图:
关于redis跟多有趣的东西,楼主也在尝试。
附件:http://down.51cto.com/data/2367264声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。