你的位置:首页 > 软件开发 > ASP.net > Redis总结(二)C#中如何使用redis

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

发布时间:2015-11-17 19:00:02
上一篇讲述了安装redis《Redis总结(一)Redis安装》,同时也大致介绍了redis的优势和应用场景。本篇着重讲解.NET中如何使用redis和C#。   Redis官网提供了很多开源的C#客户端。例如,Nhiredis ,ServiceStack.Redis ,St ...

  上一篇讲述了安装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。 下载示例代码。

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

 

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

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;    }  }}

原标题:Redis总结(二)C#中如何使用redis

关键词:C#

C#
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录