首页 > 代码库 > 基于ServiceStack.Redis上对REDIS访问的再次封装

基于ServiceStack.Redis上对REDIS访问的再次封装

  1. 概述

RedisOpLib.dll 是基于ServiceStack.Redis上对Redis操作的再一次封装,引用此类之后对REDIS操作变的很简单

 

  2.组成

    a. RedisOpLib.dll 封装的主文件

    b. Redis.config   默认的配置文件,还可以随意增加如 RedisA.config,RedisB.config,此配置文件结构如下:

<configuration>
  <AutoStart>YES</AutoStart>
  <IdleTimeOutSecs>0</IdleTimeOutSecs>
  <MaxReadPoolSize>1000</MaxReadPoolSize>
  <MaxWritePoolSize>1000</MaxWritePoolSize>
  <PoolTimeout>0</PoolTimeout>

<!--读取地址,多个地址使用逗号(,)分开 -->
  <ReadonlyHost>192.168.2.238:6380</ReadonlyHost> 

<!--读写地址,多个地址使用逗号(,)分开 -->

  <ReadWriteHost>192.168.2.238:6380</ReadWriteHost>
  <SocketReceiveTimeout>0</SocketReceiveTimeout>
  <SocketSendTimeout>0</SocketSendTimeout>

<!-- 对于方法ToOptimizedResultUsingCache,是否启用Redis缓区(不重要,可以在程序中手工指定) -->
  <OptimizedResultUsingCache>True</OptimizedResultUsingCache>

<!-- 是否缓冲为String.Empty或null的缓存项 -->
  <OptimizedResultUsingCacheIncludeNullObject>False</OptimizedResultUsingCacheIncludeNullObject>
  <RedisMode>POOL</RedisMode>
  <CacheKeys>
    <Key Name="RegionList" Value="http://www.mamicode.com/2:0:0" /> <!--缓存类型为RegionList的的缓区项的有效时间为2小时 -->
  </CacheKeys>
</configuration>

RedisMode的定义如下:

 /// <summary>
    /// BALANCE,FAILOVER只能使用ReadWriteHost地址
    /// 默认为POOL,但此方法有一问题,REDIS地址如果有故障会导致其它程序错误
    /// </summary>
    internal enum REDIS_MODE
    {
      POOL, //使用连接池 要使用Master-Slave复制
      BALANCE , //负载均衡模式 根据key计算hash,再根据HASH去取相应的服务
      FAILOVER  //故障转移模式,BALANCE后取得的地址PING不通就去尝试其它地址
    }

 3.程序源码

   http://files.cnblogs.com/victor596/RedisOpLib.rar

4.调用

  a. 先在REDIS中查找,找到则直接返回,没找到则调用匿名函数返回数据并同时存入REDIS.

 return RedisOpLib.ToOptimizedResultUsingCache2<
                List<clsKeyValue<string, ScoreCalcParameters>>>(
                Common.GetPerfPars(), "PerfPars", () =>  //PerfPars就是在 Redis.config中定义的缓存类型  

     {
                        ServiceStackApp appSetting = new ServiceStackApp();
                        appSetting.GetSettings();
                        return appSetting.PerfConfig.PerfDefineList;
                    });

 b.直接访问

string redisKey = Common.GetRestartCommand(Tag);
            string ret = RedisOpLib.Get<string>(redisKey);

再如:

RedisOpLib.Get<string>("redisA", "yourRedisKey" )

 //此段代码会使用 redisA.config 文件作为它的配置文件,而非 Redis.config .

在增加REDIS缓存项时,也可以指定缓存类型

public static bool Set<T>(string key, T obj, string cacheKeySetting)  //cacheKeySetting就是缓存类型

 

就是这样,不当之处请斧正.

 

基于ServiceStack.Redis上对REDIS访问的再次封装