日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

ServiceStack.Redis之IRedisClient第三篇

發布時間:2024/9/5 数据库 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ServiceStack.Redis之IRedisClient第三篇 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

事實上,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對象

轉載于:https://www.cnblogs.com/YuanZhaoBest/p/4095525.html

總結

以上是生活随笔為你收集整理的ServiceStack.Redis之IRedisClient第三篇的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。