ServiceStack.Redis之IRedisClient<第三篇>

來源:互聯網
上載者:User

標籤:des   blog   http   io   ar   os   使用   sp   for   

  事實上,IRedisClient裡面的很多方法,其實就是Redis的命令名。只要對Redis的命令熟悉一點就能夠非常快速地理解和掌握這些方法,趁著現在對Redis不是特別瞭解,我也對著命令來瞭解一下這些方法。

一、屬性

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

 

二、IRedisClient資料操作

  1、ICacheClient介面

  IRedisClient實現了介面ICacheClient,其中ICacheClient主要提供的功能如下:

方法 說明
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類型的參數。這兩個都是緩衝失效的時間(相當於緩衝依賴裡的絕對到期時間)。

  • DateTime失效點:到達該時間點,立即失效;
  • TimeSpan失效點:經過該時間段,立即失效;

  簡單樣本:

        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("");        }

  2、簡易功能

  當然,除了實現ICacheClient介面的功能外,對於基本操作,實際上也還有很多功能

方法 說明
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擷取當前儲存的值是什麼類型:

None = 0
String = 1
List = 2
Set = 3
SortedSet = 4
Hash = 5

  

  

  3、內建集合

  比如,IRedisClient支援在內部維護如下集合類型的資料:

  • List<T>
  • 排序的List<T>(.Net 4.0後的SortedSet)
  • HashSet<T>

  關於如下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);    //輸出         }

   3、內建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);

  

  4、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

  5、事務

  Redis中的事務

方法 說明
Watch 監視一個(或多個) key ,如果在事務執行之前這個(或這些) key 被其他命令所改動,那麼事務將被打斷。
UnWatch 取消 WATCH 命令對所有 key 的監視
AcquireLock 申請對一個Key加鎖(期間其他對象不能訪問)
CreateTransaction 建立一個事務,返回一個IRedisTransaction對象
CreateSubscription 建立一個訂閱事件返回一個IRedisSubscription對象
CreatePipeline 返回一個IRedisPipeline對象

ServiceStack.Redis之IRedisClient<第三篇>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.