ServiceStack.Redis 使用

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,

 

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. 配置文件

<!-- 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. 测试程序调用

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. 输出结果

     

出处:http://www.fpeach.com/ 

转载于:https://www.cnblogs.com/NotEnough/p/9039278.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值