标签:
摘要
上一篇讲述了安装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 }
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 }
实战:封装redis对哈希表操作的代码
实战中,我们操作redis最好还是要封装一下的。
实战:操作redis的增删改查
总结
C#中使用Redis学习二 .NET4.5中使用redis hash操作
标签:
原文地址:http://www.cnblogs.com/mzws/p/redis2.html