標籤:
- 概述
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="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訪問的再次封裝