事實上,IRedisClient裏面的不少方法,其實就是Redis的命令名。只要對Redis的命令熟悉一點就可以很是快速地理解和掌握這些方法,趁着如今對Redis不是特別瞭解,我也對着命令來了解一下這些方法。html
IRedisClient的屬性以下:數據庫
屬性 | 說明 |
ConnectTimeout | 鏈接超時 |
Db | 當前數據庫的ID或下標 |
DbSize | 當前數據庫的 key 的數量 |
HadExceptions | |
Hashes | 存儲複雜對象,一個value中有幾個field |
Host | Redis的Server服務器主機地址 |
Info | 返回關於 Redis 服務器的各類信息和統計數值 |
LastSave | 最近一次 Redis 成功將數據保存到磁盤上的時間 |
Lists | 當前數據庫中全部的List集合 |
Password | 密碼 |
Port | Redis的Server端口 |
RetryCount | 重試次數 |
RetryTimeout | 重試超時 |
SendTimeout | 發送超時 |
Sets | 當前數據庫中全部的HashSet<T>集合 |
SortedSets | 當前數據庫中全部的SortedSet<T>集合 |
this[string key] | 經過索引的方式(key)訪問一個字符串類型值 |
代碼示例:緩存
RClient.AddItemToSet("蜀國", "劉備"); RClient.AddItemToSet("蜀國", "關羽"); RClient.AddItemToSet("蜀國", "張飛"); IHasNamed<IRedisSet> rr = RClient.Sets; HashSet<string> HashSetString = rr["蜀國"].GetAll(); foreach (string str in HashSetString) { Response.Write(str); }
一、ICacheClient接口服務器
IRedisClient實現了接口ICacheClient,其中ICacheClient主要提供的功能以下:dom
方法 | 說明 |
Add | 根據傳入的key-value添加一條記錄,當key已存在返回false |
FlushAll | 使全部緩存失效(清除Redis全部數據庫的全部Key) |
Get | 根據傳入的key獲取一條記錄的值 |
GetAll | 根據傳入的多個key獲取多條記錄的值 |
Remove | 根據傳入的key移除一條記錄 |
RemoveAll | 根據傳入的多個key移除多條記錄 |
Replace | 根據傳入的key覆蓋一條記錄的值,當key不存在不會添加 |
Set | 根據傳入的key修改一條記錄的值,當key不存在則添加 |
SetAll | 根據傳入的多個key覆蓋多條記錄 |
Increment | |
Decrement |
特別說明,好比添加的主要方法包括兩個重載,一個多了個DateTime類型參數,一個多了TimeSpan類型的參數。這兩個都是緩存失效的時間(至關於緩存依賴裏的絕對過時時間)。異步
簡單示例:ui
public ActionResult Index() { RedisClientManagerConfig RedisConfig = new RedisClientManagerConfig(); RedisConfig.AutoStart = true; RedisConfig.MaxReadPoolSize = 60; RedisConfig.MaxWritePoolSize = 60; PooledRedisClientManager prcm = new PooledRedisClientManager(new List<string>() { "127.0.0.1" }, new List<string>() { "127.0.0.1" }, RedisConfig); using (IRedisClient RClient = prcm.GetClient()) { RClient.Add("c1", "緩存1"); RClient.Set("c1", "緩存2"); RClient.Replace("c1", "緩存3"); Response.Write(RClient.Get<string>("c1")); RClient.Remove("c1"); Response.Write(RClient.Get<string>("c1") == null); } return Content(""); }
二、簡單功能this
固然,除了實現ICacheClient接口的功能外,對於基本操做,實際上也還有不少功能spa
方法 | 說明 |
AppendToValue | 根據Key將參數value追加到原有值的結尾 |
ContainsKey | 判斷Key在本數據庫內是否已被使用(包括各類類型、內置集合等等) |
GetAllKeys | 獲取全部的Keys集合 |
DecrementValue | 根據指定的Key,將值減1(僅整型有效) |
DecrementValueBy | 根據指定的Key,將值減去指定值(僅整型有效) |
IncrementValue | 根據指定的Key,將值加1(僅整型有效) |
IncrementValueBy | 根據指定的Key,將值加上指定值(僅整型有效) |
RenameKey | 重命名一個Key,值不變 |
SearchKeys | 從數據庫中查找名稱相等的Keys的集合,特殊模式如h[ae]llo,僅英文有效。 |
GetRandomKey | 隨機獲取一個已經被使用的Key |
GetValue | 根據Key獲取值,只對string類型有效 |
GetValues | 根據輸入的多個Key獲取多個值,支持泛型 |
GetTimeToLive | 獲取指定Key的項距離失效點的TimeSpan |
GetSortedSetCount | 獲取已排序集合的項的數目,參數支持下標以及score篩選 |
ExpireEntryAt | 根據指定的key設置一項的到期時間(DateTime) |
ExpireEntryIn | 根據指定的key設置一項的到期時間(TimeSpan) |
FlushDb | 清除本數據庫的全部數據 |
FlushAll | 清除全部數據庫的全部數據 |
Shutdown | 中止全部客戶端,保存,關閉Redis服務 |
Save | 保存數據DB文件到硬盤 |
SaveAsync | 異步保存 |
RewriteAppendOnlyFileAsync | 只在異步狀況下將數據追加到服務器文件 |
WriteAll | |
PublishMessage | 將Message發送到指定的頻道 |
StoreObject | |
GetValuesMap | 以鍵值對的方式返回值類型相同的多條數據,支持泛型與返回字符串。 |
字符串 | |
SetEntry | 根據Key修改一個值,存在則覆蓋。(只能設置字符串) |
SetEntryIfNotExists | 根據Key設置一個值,僅僅當Key不存在時有效,如Key已存在則不修改(只支持字符串) |
SetEntryIfNotExists | 根據Key設置一個值,返回舊值。 |
GetEntryType | 根據Key獲取當前存儲的值是什麼類型:code None = 0 |
三、內置集合
好比,IRedisClient支持在內部維護以下集合類型的數據:
關於以下4種類型數據的操做:
方法 | 說明 |
AddItemToList | 添加一個項到內部的List<T> |
AddItemToSet | 添加一個項到內部的HashSet<T> |
AddItemToSortedSet | 添加一個項到內部的排序List<T>,其中重載方法多了個score:排序值。優先按照score從小->大排序,不然按值小到大排序 |
AddRangeToList | 一次過將參數中的List<T>中的多個值添加入內部的List<T> |
AddRangeToSet | 一次過將參數中的HashSet<T>中的多個值添加入內部的HashSet<T> |
AddRangeToSortedSet | 一次過將參數中的List<T>中的多個值添加到內部List<T>,重載方法的score表示排序值。 |
GetAllItemsFromList | 獲取指定ListId的內部List<T>的全部值 |
GetAllItemsFromSet | 獲取指定SetId的內部HashSet<T>的全部值 |
GetAllItemsFromSortedSet | 獲取指定ListId的內部已排序List<T>的全部值 |
GetAllItemsFromSortedSetDesc | 獲取指定ListId的內部已排序List<T>的全部值,不過獲取的值是倒序排列後的。 |
GetRangeFromList | 獲取指定ListId的內部List<T>中指定下標範圍的數據 |
GetRangeFromSortedList | 獲取指定ListId的內部已排序List<T>中指定下標範圍的數據 |
GetRangeFromSortedSet | 獲取指定SetId的內部HashSet<T>中指定下標範圍的數據 |
GetRangeFromSortedSetByHighestScore | 獲取指定SetId的內部HashSet<T>中按照score由高->低排序後的分值範圍的數據,而且支持skip、take |
GetRangeFromSortedSetByLowestScore | 同上,只不過是按score分值由低->高取必定範圍內的數據 |
GetRangeFromSortedSetDesc | 按倒序獲取內部HashSet<T>的指定下標範圍內的數據 |
GetRangeWithScoresFromSortedSet | 與From相同,只不過獲取的是鍵值對,數據中帶分值score |
GetRangeWithScoresFromSortedSetByHighestScore | 同上 |
GetRangeWithScoresFromSortedSetByLowestScore | 同上 |
GetRangeWithScoresFromSortedSetDesc | 同上 |
GetAllWithScoresFromSortedSet | 獲取指定ListId的已排序的內部List<T>與其score |
GetSortedItemsFromList | 從指定ListId的List<T>中獲取按指定排序的集合,支持Skip,Take |
GetSortedEntryValues | 從指定ListId的List<T>中獲取通過排序指定開始位置與個數的項 |
RemoveAllFromList | 移除指定ListId的內部List<T> |
RemoveItemFromList | 移除指定ListId的內部List<T>中第二個參數值相等的那一項 |
RemoveItemFromSet | 從指定SetId的內部HashSet<T>中移除與第二個參數值相等的那一項 |
RemoveItemFromSortedSet | 從指定ListId中已排序的內部List<T>中移除值相等的那一項 |
RemoveRangeFromSortedSet | 從指定ListId已排序的List<T>中移除指定下標範圍的項 |
RemoveRangeFromSortedSetByScore | 從指定ListId已排序的List<T>中移除指定score範圍的項 |
RemoveStartFromList | 從指定ListId移除開頭那一項 |
RemoveEndFromList | 從指定ListId移除末尾那項 |
BlockingRemoveStartFromList | 阻塞地從指定ListId移除開頭那一項 |
BlockingRemoveStartFromLists | |
RemoveEntry | 根據傳入的多個ListId,清除多個內部List<T> |
RemoveAllLuaScripts | 清除全部的 Lua 腳本緩存 |
RemoveEntryFromHash | |
GetItemFromList | 根據ListId和下標獲取一項 |
GetItemIndexInSortedSet | 根據List和值,獲取內置的排序後的List<T>的下標 |
GetItemIndexInSortedSetDesc | 同上,不過順序相反 |
GetItemScoreInSortedSet | 根據傳入的ListId和值獲取內置List<T>項的score |
GetListCount | 根據ListId,獲取內置的List<T>的項數 |
GetSetCount | 根據SetId,獲取內置的HashSet<T>的項數 |
GetIntersectFromSets | 從輸入的多個HashSet<T>的Id中獲取交集 |
GetUnionFromSets | 從輸入的多個HashSet<T>的Id中獲取並集 |
GetRandomItemFromSet | 從指定ListId的集合中獲取隨機項 |
StoreUnionFromSets | 將多個HashSet<T>,合併爲第一個參數中的一個大HashSet<T>,第一個參數中的HashSet<T>本來能夠不存在 |
StoreUnionFromSortedSets | 將多個SortedSet<T>,合併爲第一個參數中的一個大SortedSet<T>,第一個參數中的SortedSet<T>本來能夠不存在 |
StoreIntersectFromSets | 將交集結果保存在第一個參數的集合中,對HastSet<T>做用 |
StoreIntersectFromSortedSets | 將交集結果保存在第一個參數的集合中,對SortedSet<T>做用 |
EnqueueItemOnList | 將一個元素存入指定ListId的List<T>的頭部 |
DequeueItemFromList | 將指定ListId的List<T>末尾的那個元素出列,返回出列元素 |
BlockingDequeueItemFromList | 將指定ListId的List<T>末尾的那個元素出列,區別是:會阻塞該List<T>,支持超時時間,返回出列元素 |
BlockingDequeueItemFromLists | |
BlockingPopItemFromList | 阻塞地將指定ListId的List<T>末尾的哪個元素移除 |
BlockingPopItemFromLists | |
BlockingPopAndPushItemBetweenLists | 將第一個集合的元素移除並添加到第二個集合的頭部,返回該元素,會同時阻塞兩個集合 |
PopItemFromList | 從指定ListId的List<T>末尾移除一項並返回 |
PopItemFromSet | 從指定SetId的HashSet<T>末尾移除一項並返回 |
PopItemWithHighestScoreFromSortedSet | 從指定SetId的HashSet<T>移除score最高的那一項 |
PopItemWithLowestScoreFromSortedSet | 從指定SetId的HashSet<T>移除score最低的那一項 |
PopAndPushItemBetweenLists | 將第一個集合的元素移除並添加到第二個集合的頭部 |
SetContainsItem | 判斷指定SetId的HashSet<T>中是否包含指定的value(僅僅支持字符串) |
SortedSetContainsItem | 判斷SortedSet是否包含一個鍵 |
TrimList | 根據ListId裁剪內置集合,保留下去from->at之間(包含from於at)的元素,其他的裁去 |
IncrementItemInSortedSet | 爲指定ListId的集合中的value的分值score加上指定分值 |
SetItemInList | 從新設置指定ListId和下標的value爲指定值 |
PushItemToList | 在指定ListId的內置List<T>中入列一個鍵值對,在末尾 |
PrependItemToList | 將一個值插入到List<T>的最前面 |
PrependRangeToList | 一次性添加多個值到指定ListId的內置List<T>中 |
GetDifferencesFromSet | 返回存在於第一個集合,可是不存在於其餘集合的數據。差集 |
StoreDifferencesFromSet | 將求差集的結果保存在第一個參數的集合中 |
MoveBetweenSets | 將元素從一個集合移動到另外一個集合的開頭。(刪除與添加) |
下面僅給出一個List<T>與HashSet<T>的示例:
//內部維護一個List<T>集合 RClient.AddItemToList("蜀國", "劉備"); RClient.AddItemToList("蜀國", "關羽"); RClient.AddItemToList("蜀國", "張飛"); List<string> ListString = RClient.GetAllItemsFromList("蜀國"); foreach (string str in ListString) { Response.Write(str); //輸出 劉備 關羽 張飛 } RClient.AddItemToSet("魏國", "曹操"); RClient.AddItemToSet("魏國", "曹操"); RClient.AddItemToSet("魏國", "典韋"); HashSet<string> HashSetString = RClient.GetAllItemsFromSet("魏國"); foreach (string str in HashSetString) { Response.Write(str); //輸出 典韋 曹操 }
下面再給一個範圍Range操做示例:
//內部維護一個List<T>集合 RClient.AddItemToSortedSet("蜀國", "劉備", 5); RClient.AddItemToSortedSet("蜀國", "關羽", 2); RClient.AddItemToSortedSet("蜀國", "張飛", 3); IDictionary<String,double> DicString = RClient.GetRangeWithScoresFromSortedSet("蜀國", 0, 2); foreach (var r in DicString) { Response.Write(r.Key + ":" + r.Value); //輸出 }
三、內置Hash
內部維護一個HashTable
方法 | 說明 |
SetEntryInHash | 設置一個鍵值對入Hash表,若是哈希表的key存在則覆蓋 |
SetEntryInHashIfNotExists | 當哈希表的key未被使用時,設置一個鍵值對如Hash表 |
GetHashValues | 根據HashId獲取多個改HashId下的多個值 |
GetValuesFromHash | 根據HashId和Hash表的Key獲取多個值(支持多個key) |
GetValueFromHash | 根據HashId和Hash表的Key獲取單個值 |
GetHashKeys | 獲取指定HashId下的全部Key |
GetHashValues | 獲取指定HashId下的全部值 |
GetHashCount | 獲取指定HashId下的全部Key數量 |
HashContainsEntry | 判斷指定HashId的哈希表中是否包含指定的Key |
IncrementValueInHash | 將指定HashId的哈希表中的值加上指定值 |
StoreAsHash | 將一個對象存入Hash(支持泛型) |
GetFromHash | 根據Id從Hash表中取出對象(支持泛型) |
SetRangeInHash | 經過IEnumerable<KeyValuePair<string, string>>一次性設置多個值,當內部Hash的key不存在則添加,存在則覆蓋 |
代碼示例:
RClient.SetEntryInHash("xxx","key","123"); List<KeyValuePair<string, string>> keyValuePairs = new List<KeyValuePair<string, string>>(); KeyValuePair<string, string> kvp = new KeyValuePair<string, string>("key", "1"); keyValuePairs.Add(kvp); RClient.SetRangeInHash("xxx", keyValuePairs);
四、Lua Script
從 Redis 2.6.0 版本開始,經過內置的 Lua 解釋器,能夠執行各類Lua腳本。IRedisClient支持執行Lua腳本,其供用於執行Lua腳本的方法以下:
方法 | 說明 |
LoadLuaScript | 將一個腳本裝入腳本緩存,但並不當即運行它 |
KillRunningLuaScript | 中止正在運行的指定Id的腳本 |
ExecLuaAsInt | |
ExecLuaAsList | |
ExecLuaAsString | |
ExecLuaShaAsInt | |
ExecLuaShaAsList | |
ExecLuaShaAsString | |
HasLuaScript | 判斷Lua腳本是否在腳本緩存裏 |
CalculateSha1 | |
WhichLuaScriptsExists |
關於Lua腳本能夠到這裏去了解:http://www.cnblogs.com/ly4cn/archive/2006/08/04/467550.html
五、事務
Redis中的事務
方法 | 說明 |
Watch | 監視一個(或多個) key ,若是在事務執行以前這個(或這些) key 被其餘命令所改動,那麼事務將被打斷。 |
UnWatch | 取消 WATCH 命令對全部 key 的監視 |
AcquireLock | 申請對一個Key加鎖(期間其餘對象不能訪問) |
CreateTransaction | 建立一個事務,返回一個IRedisTransaction對象 |
CreateSubscription | 建立一個訂閱事件返回一個IRedisSubscription對象 |
CreatePipeline | 返回一個IRedisPipeline對象 |