码迷,mamicode.com
首页 > Windows程序 > 详细

C#中使用Redis学习二 .NET4.5中使用redis hash操作

时间:2015-01-06 13:30:16      阅读:922      评论:0      收藏:0      [点我收藏+]

标签:

 

上一篇>>

摘要


   上一篇讲述了安装redis客户端和服务器端,也大体地介绍了一下redis。本篇着重讲解.NET4.0 和 .NET4.5中如何使用redis和C# redis操作哈希表。并且会将封装的一些代码贴一下。在讲解的过程中,我打算结合redis操作命令一起叙述,算是作为对比吧。这样也能让读者清楚了解,所分装的代码对应的redis的哪一些操作命令。

  hash哈希表简介


 

  

 

 

如何在.NET4.0/4.5中安装redis组件?


  在上一篇博文中,安装好的redis服务器端,要记得开启服务。然后再在.NET4.5(.NET4.0同理)项目中添加对redis操作的dll文件的引用。引用的步骤如下:

第一步:右键项目中的引用,选择“管理NuGet程序包”;

第二步:在搜索栏中输入“Redis client for the Redis NoSQL DB”,联机查找;如下图:

技术分享

  联机搜索结构中的第一个(如上图红色区域的组件,其版本号为4.0.35)就是要安装的组件了。接下来我们就继续点击“安装”按钮,进入下载组件,等下载完成后,继续选择“接受条款”,然后继续安装。安装过程中会出现下图情况:

技术分享

  这句红色错误的意思是我们安装的ServiceStack.Interfaces 4.0.35版本与当前的.NET4.5框架中组件不兼容。这说明我们需要降低或是提高.NET版本解决此问题。我安装的是.NET4.5,所以我只能降低版本。降低.NET版本的方法大家应该都知道的。我就在累述一次,希望大家不要嫌烦,毕竟还有新手在。方法:右键项目文件选择“属性”==》“应用程序”==》“目标框架”,然后选择各个版本去尝试之前的两步操作,直到可以安装为止。

  我试过了,.NET4.0也会遇到同样问题,直到.NET3.5才可以。当然此时安装的ServiceStack.Interfaces 版本是1.0.0.0 ,这样我们再把.NET版本恢复4.5即可使用了。,其实是变相在.NET4.0/4.5下使用redis客户端。不知道各位有没有遇到这样的问题,还是直接拷贝别人的dll文件。当自己亲自去操作的时候,才会发现,其实就算是安装一个组件都可能会出现各种各样的问题。所以,要想了解全过程的话,我们还是要身体力行的啊。好了,这样就说明在.NET4.5下安装好了redis client了。

实战:在项目中运用redis代码详解


  这部分主要是讲解怎样连接到redis服务器。其中包含很多配置,我就用代码去说明一切了。配置文件如下代码:

1  <configSections>
2     <section name="RedisConfig" type="RedisDemo.Common.Redis.RedisConfigInfo, RedisDemo"/>
3  </configSections>
4  <RedisConfig WriteServerList="127.0.0.1:6379" ReadServerList="127.0.0.1:6379" MaxWritePoolSize="60"
  MaxReadPoolSize="60" AutoStart="true" LocalCacheTime="180" RecordeLog="false"/>

  在这里对RedisConfig这段配置文件的属性作下说明。

  WriteServerList:可写的Redis链接地址。

  ReadServerList:可读的Redis链接地址。

  MaxWritePoolSize:最大写链接数。

  MaxReadPoolSize:最大读链接数。

  AutoStart:自动重启。

  LocalCacheTime:本地缓存到期时间,单位:秒。

  RecordeLog:是否记录日志,该设置仅用于排查redis运行时出现的问题,如redis工作正常,请关闭该项。

  RedisConfigInfo类是记录redis连接信息,此信息和配置文件中的RedisConfig相呼应。cs代码如下:(这段代码不是我自己写的,但是我觉得应该这样设计。所以,copy了一下别人的代码。)

技术分享
  1 using System.Configuration;
  2 
  3 namespace RedisDemo.Common.Redis
  4 {
  5     public sealed class RedisConfigInfo : ConfigurationSection
  6     {
  7         public static RedisConfigInfo GetConfig()
  8         {
  9             var section = (RedisConfigInfo)ConfigurationManager.GetSection("RedisConfig");
 10             return section;
 11         }
 12 
 13         public static RedisConfigInfo GetConfig(string sectionName)
 14         {
 15             var section = (RedisConfigInfo)ConfigurationManager.GetSection("RedisConfig");
 16             if (section == null)
 17             {
 18                 throw new ConfigurationErrorsException("Section " + sectionName + " is not found.");
 19             }
 20             return section;
 21         }
 22 
 23         /// <summary>
 24         /// 可写的Redis链接地址
 25         /// </summary>
 26         [ConfigurationProperty("WriteServerList", IsRequired = false)]
 27         public string WriteServerList
 28         {
 29             get
 30             {
 31                 return (string)base["WriteServerList"];
 32             }
 33             set
 34             {
 35                 base["WriteServerList"] = value;
 36             }
 37         }
 38         
 39         /// <summary>
 40         /// 可读的Redis链接地址
 41         /// </summary>
 42         [ConfigurationProperty("ReadServerList", IsRequired = false)]
 43         public string ReadServerList
 44         {
 45             get
 46             {
 47                 return (string)base["ReadServerList"];
 48             }
 49             set
 50             {
 51                 base["ReadServerList"] = value;
 52             }
 53         }
 54         
 55         /// <summary>
 56         /// 最大写链接数
 57         /// </summary>
 58         [ConfigurationProperty("MaxWritePoolSize", IsRequired = false, DefaultValue = 5)]
 59         public int MaxWritePoolSize
 60         {
 61             get
 62             {
 63                 var maxWritePoolSize = (int)base["MaxWritePoolSize"];
 64                 return maxWritePoolSize > 0 ? maxWritePoolSize : 5;
 65             }
 66             set
 67             {
 68                 base["MaxWritePoolSize"] = value;
 69             }
 70         }
 71         
 72         /// <summary>
 73         /// 最大读链接数
 74         /// </summary>
 75         [ConfigurationProperty("MaxReadPoolSize", IsRequired = false, DefaultValue = 5)]
 76         public int MaxReadPoolSize
 77         {
 78             get
 79             {
 80                 var maxReadPoolSize = (int)base["MaxReadPoolSize"];
 81                 return maxReadPoolSize > 0 ? maxReadPoolSize : 5;
 82             }
 83             set
 84             {
 85                 base["MaxReadPoolSize"] = value;
 86             }
 87         }
 88         
 89         /// <summary>
 90         /// 自动重启
 91         /// </summary>
 92         [ConfigurationProperty("AutoStart", IsRequired = false, DefaultValue = true)]
 93         public bool AutoStart
 94         {
 95             get
 96             {
 97                 return (bool)base["AutoStart"];
 98             }
 99             set
100             {
101                 base["AutoStart"] = value;
102             }
103         }
104         
105         /// <summary>
106         /// 本地缓存到期时间,单位:秒
107         /// </summary>
108         [ConfigurationProperty("LocalCacheTime", IsRequired = false, DefaultValue = 36000)]
109         public int LocalCacheTime
110         {
111             get
112             {
113                 return (int)base["LocalCacheTime"];
114             }
115             set
116             {
117                 base["LocalCacheTime"] = value;
118             }
119         }
120 
121         /// <summary>
122         /// 是否记录日志,该设置仅用于排查redis运行时出现的问题,如redis工作正常,请关闭该项
123         /// </summary>
124         [ConfigurationProperty("RecordeLog", IsRequired = false, DefaultValue = false)]
125         public bool RecordeLog
126         {
127             get
128             {
129                 return (bool)base["RecordeLog"];
130             }
131             set
132             {
133                 base["RecordeLog"] = value;
134             }
135         }
136 
137     }
138 }
RedisConfigInfo 类

  RedisManager类主要是创建链接池管理对象的。

技术分享
 1 using System.Linq;
 2 using ServiceStack.Redis;
 3 using System.Collections.Generic;
 4 
 5 namespace RedisDemo.Common.Redis
 6 {
 7     public class RedisManager
 8     {
 9         /// <summary>
10         /// redis配置文件信息
11         /// </summary>
12         private static readonly RedisConfigInfo RedisConfigInfo = RedisConfigInfo.GetConfig();
13 
14         private static PooledRedisClientManager _prcm;
15 
16         /// <summary>
17         /// 静态构造方法,初始化链接池管理对象
18         /// </summary>
19         static RedisManager()
20         {
21             CreateManager();
22         }
23         
24         /// <summary>
25         /// 创建链接池管理对象
26         /// </summary>
27         private static void CreateManager()
28         {
29             var writeServerList = SplitString(RedisConfigInfo.WriteServerList, ",");
30             var readServerList = SplitString(RedisConfigInfo.ReadServerList, ",");
31 
32             _prcm = new PooledRedisClientManager(readServerList, writeServerList,
33                              new RedisClientManagerConfig
34                              {
35                                  MaxWritePoolSize = RedisConfigInfo.MaxWritePoolSize,
36                                  MaxReadPoolSize = RedisConfigInfo.MaxReadPoolSize,
37                                  AutoStart = RedisConfigInfo.AutoStart,
38                              });
39         }
40 
41         private static IEnumerable<string> SplitString(string strSource, string split)
42         {
43             return strSource.Split(split.ToArray());
44         }
45 
46         /// <summary>
47         /// 客户端缓存操作对象
48         /// </summary>
49         public static IRedisClient GetClient()
50         {
51             if (_prcm == null)
52             {
53                 CreateManager();
54             }
55             return _prcm.GetClient();
56         }
57 
58     }
59 }
RedisManager 类

实战:封装redis对哈希表操作的代码


   实战中,我们操作redis最好还是要封装一下的。

 

实战:操作redis的增删改查


   

总结


 

C#中使用Redis学习二 .NET4.5中使用redis hash操作

标签:

原文地址:http://www.cnblogs.com/mzws/p/redis2.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!