专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

Redis总结(二)C#中如何使用redis

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/2/14 1:08:19       共计:3615 浏览
上一篇讲述了安装redis《Redis总结(一)Redis安装》,同时也大致介绍了redis的优势和应用场景。本篇着重讲解.NET中如何使用redis和C#。

 

Redis官网提供了很多开源的C#客户端。例如,Nhiredis ,ServiceStack.Redis ,StackExchange.Redis等。其中ServiceStack.Redis应该算是比较流行的。它提供了一整套从Redis数据结构都强类型对象转换的机制并将对象json序列化。所以这里只介绍ServiceStack.Redis,它也是目前我们产品中所使用的客户端。 

 

ServiceStack.Redis地址:https://github.com/ServiceStack/ServiceStack.Redis 

 

1. 建立一个控制台应用程序,并引用以下ServiceStack.Redis相关的四个类库。或者通过Nuget进行安装Redis常用组件ServiceStack.Redis。 下载示例代码。

      

 

2. 创建一个Redis操作的公用类RedisCacheHelper,

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Text; using System.Web; using ServiceStack.Common.Extensions; using ServiceStack.Redis; using ServiceStack.Logging;   namespace Weiz.Redis.RedisTest {     public class RedisCacheHelper     {         private static readonly PooledRedisClientManager pool = null;         private static readonly string[] redisHosts = null;         public static int RedisMaxReadPool = int.Parse(ConfigurationManager.AppSettings["redis_max_read_pool"]);         public static int RedisMaxWritePool = int.Parse(ConfigurationManager.AppSettings["redis_max_write_pool"]);           static RedisCacheHelper()         {             var redisHostStr = ConfigurationManager.AppSettings["redis_server_session"];               if (!string.IsNullOrEmpty(redisHostStr))             {                 redisHosts = redisHostStr.Split(',');                   if (redisHosts.Length > 0)                 {                     pool = new PooledRedisClientManager(redisHosts, redisHosts,                         new RedisClientManagerConfig()                         {                             MaxWritePoolSize = RedisMaxWritePool,                             MaxReadPoolSize = RedisMaxReadPool,                             AutoStart = true                         });                 }             }         }         public static void Add<T>(string key, T value, DateTime expiry)         {             if (value == null)             {                 return;             }               if (expiry <= DateTime.Now)             {                 Remove(key);                   return;             }               try             {                 if (pool != null)                 {                     using (var r = pool.GetClient())                     {                         if (r != null)                         {                             r.SendTimeout = 1000;                             r.Set(key, value, expiry - DateTime.Now);                         }                     }                 }             }             catch (Exception ex)             {                 string msg = string.Format("{0}:{1}发生异常!{2}", "cache", "存储", key);             }           }           public static void Add<T>(string key, T value, TimeSpan slidingExpiration)         {             if (value == null)             {                 return;             }               if (slidingExpiration.TotalSeconds <= 0)             {                 Remove(key);                   return;             }               try             {                 if (pool != null)                 {                     using (var r = pool.GetClient())                     {                         if (r != null)                         {                             r.SendTimeout = 1000;                             r.Set(key, value, slidingExpiration);                         }                     }                 }             }             catch (Exception ex)             {                 string msg = string.Format("{0}:{1}发生异常!{2}", "cache", "存储", key);             }           }               public static T Get<T>(string key)         {             if (string.IsNullOrEmpty(key))             {                 return default(T);             }               T obj = default(T);               try             {                 if (pool != null)                 {                     using (var r = pool.GetClient())                     {                         if (r != null)                         {                             r.SendTimeout = 1000;                             obj = r.Get<T>(key);                         }                     }                 }             }             catch (Exception ex)             {                 string msg = string.Format("{0}:{1}发生异常!{2}", "cache", "获取", key);             }                 return obj;         }           public static void Remove(string key)         {             try             {                 if (pool != null)                 {                     using (var r = pool.GetClient())                     {                         if (r != null)                         {                             r.SendTimeout = 1000;                             r.Remove(key);                         }                     }                 }             }             catch (Exception ex)             {                 string msg = string.Format("{0}:{1}发生异常!{2}", "cache", "删除", key);             }           }           public static bool Exists(string key)         {             try             {                 if (pool != null)                 {                     using (var r = pool.GetClient())                     {                         if (r != null)                         {                             r.SendTimeout = 1000;                             return r.ContainsKey(key);                         }                     }                 }             }             catch (Exception ex)             {                 string msg = string.Format("{0}:{1}发生异常!{2}", "cache", "是否存在", key);             }               return false;         }     } }

说明:RedisCacheHelper 使用的是客户端链接池模式,这样的存取效率应该是最高的。同时也更方便的支持读写分离,均衡负载。

 

3. 配置文件

1 2 3 4 5 6 <!-- redis Start   --> <add key="SessionExpireMinutes" value="180" /> <add key="redis_server_session" value="127.0.0.1:6379" /> <add key="redis_max_read_pool" value="3" /> <add key="redis_max_write_pool" value="1" /> <!--redis end-->


4. 测试程序调用

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 class Program     {         static void Main(string[] args)         {             Console.WriteLine("Redis写入缓存:zhong");               RedisCacheHelper.Add("zhong", "zhongzhongzhong", DateTime.Now.AddDays(1));               Console.WriteLine("Redis获取缓存:zhong");               string str3 = RedisCacheHelper.Get<string>("zhong");               Console.WriteLine(str3);               Console.WriteLine("Redis获取缓存:nihao");             string str = RedisCacheHelper.Get<string>("nihao");             Console.WriteLine(str);                 Console.WriteLine("Redis获取缓存:wei");             string str1 = RedisCacheHelper.Get<string>("wei");             Console.WriteLine(str1);               Console.ReadKey();         }     }


5. 输出结果

 

版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:redis集群密码设置 | ·下一条:Sql Server 2008 R2 清理内存的三种方法

Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有