日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

ServiceStack.Redis之IRedisClient第三篇

發(fā)布時(shí)間:2024/9/5 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ServiceStack.Redis之IRedisClient第三篇 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

事實(shí)上,IRedisClient里面的很多方法,其實(shí)就是Redis的命令名。只要對Redis的命令熟悉一點(diǎn)就能夠非常快速地理解和掌握這些方法,趁著現(xiàn)在對Redis不是特別了解,我也對著命令來了解一下這些方法。

一、屬性

  IRedisClient的屬性如下:

屬性說明
ConnectTimeout?連接超時(shí)
Db當(dāng)前數(shù)據(jù)庫的ID或下標(biāo)
DbSize?當(dāng)前數(shù)據(jù)庫的 key 的數(shù)量
HadExceptions??
Hashes?存儲(chǔ)復(fù)雜對象,一個(gè)value中有幾個(gè)field?
Host?Redis的Server服務(wù)器主機(jī)地址
Info?返回關(guān)于 Redis 服務(wù)器的各種信息和統(tǒng)計(jì)數(shù)值
LastSave?最近一次 Redis 成功將數(shù)據(jù)保存到磁盤上的時(shí)間
Lists?當(dāng)前數(shù)據(jù)庫中所有的List集合
Password?密碼
Port?Redis的Server端口
RetryCount?重試次數(shù)
RetryTimeout?重試超時(shí)
SendTimeout?發(fā)送超時(shí)
Sets?當(dāng)前數(shù)據(jù)庫中所有的HashSet<T>集合
SortedSets?當(dāng)前數(shù)據(jù)庫中所有的SortedSet<T>集合
this[string key]通過索引的方式(key)訪問一個(gè)字符串類型值

  代碼示例:

RClient.AddItemToSet("蜀國", "劉備");RClient.AddItemToSet("蜀國", "關(guān)羽");RClient.AddItemToSet("蜀國", "張飛");IHasNamed<IRedisSet> rr = RClient.Sets;HashSet<string> HashSetString = rr["蜀國"].GetAll();foreach (string str in HashSetString){Response.Write(str);}

?

二、IRedisClient數(shù)據(jù)操作

  1、ICacheClient接口

  IRedisClient實(shí)現(xiàn)了接口ICacheClient,其中ICacheClient主要提供的功能如下:

方法說明
Add根據(jù)傳入的key-value添加一條記錄,當(dāng)key已存在返回false
FlushAll使所有緩存失效(清除Redis所有數(shù)據(jù)庫的所有Key)
Get根據(jù)傳入的key獲取一條記錄的值
GetAll根據(jù)傳入的多個(gè)key獲取多條記錄的值
Remove根據(jù)傳入的key移除一條記錄
RemoveAll根據(jù)傳入的多個(gè)key移除多條記錄
Replace根據(jù)傳入的key覆蓋一條記錄的值,當(dāng)key不存在不會(huì)添加
Set根據(jù)傳入的key修改一條記錄的值,當(dāng)key不存在則添加
SetAll根據(jù)傳入的多個(gè)key覆蓋多條記錄
Increment?
Decrement?

  特別說明,比如添加的主要方法包括兩個(gè)重載,一個(gè)多了個(gè)DateTime類型參數(shù),一個(gè)多了TimeSpan類型的參數(shù)。這兩個(gè)都是緩存失效的時(shí)間(相當(dāng)于緩存依賴?yán)锏慕^對過期時(shí)間)。

  • DateTime失效點(diǎn):到達(dá)該時(shí)間點(diǎn),立即失效;
  • TimeSpan失效點(diǎn):經(jīng)過該時(shí)間段,立即失效;

  簡單示例:

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、簡單功能

  當(dāng)然,除了實(shí)現(xiàn)ICacheClient接口的功能外,對于基本操作,實(shí)際上也還有很多功能

方法說明
AppendToValue根據(jù)Key將參數(shù)value追加到原有值的結(jié)尾
ContainsKey判斷Key在本數(shù)據(jù)庫內(nèi)是否已被使用(包括各種類型、內(nèi)置集合等等)
GetAllKeys獲取所有的Keys集合
DecrementValue根據(jù)指定的Key,將值減1(僅整型有效)
DecrementValueBy根據(jù)指定的Key,將值減去指定值(僅整型有效)
IncrementValue根據(jù)指定的Key,將值加1(僅整型有效)
IncrementValueBy根據(jù)指定的Key,將值加上指定值(僅整型有效)
RenameKey重命名一個(gè)Key,值不變
SearchKeys從數(shù)據(jù)庫中查找名稱相等的Keys的集合,特殊模式如h[ae]llo,僅英文有效。
GetRandomKey隨機(jī)獲取一個(gè)已經(jīng)被使用的Key
GetValue根據(jù)Key獲取值,只對string類型有效
GetValues根據(jù)輸入的多個(gè)Key獲取多個(gè)值,支持泛型
GetTimeToLive獲取指定Key的項(xiàng)距離失效點(diǎn)的TimeSpan
GetSortedSetCount獲取已排序集合的項(xiàng)的數(shù)目,參數(shù)支持下標(biāo)以及score篩選
ExpireEntryAt根據(jù)指定的key設(shè)置一項(xiàng)的到期時(shí)間(DateTime)
ExpireEntryIn根據(jù)指定的key設(shè)置一項(xiàng)的到期時(shí)間(TimeSpan)
FlushDb清除本數(shù)據(jù)庫的所有數(shù)據(jù)
FlushAll清除所有數(shù)據(jù)庫的所有數(shù)據(jù)
Shutdown停止所有客戶端,保存,關(guān)閉Redis服務(wù)
Save保存數(shù)據(jù)DB文件到硬盤
SaveAsync異步保存
RewriteAppendOnlyFileAsync只在異步情況下將數(shù)據(jù)追加到服務(wù)器文件
WriteAll?
PublishMessage將Message發(fā)送到指定的頻道
StoreObject?
GetValuesMap以鍵值對的方式返回值類型相同的多條數(shù)據(jù),支持泛型與返回字符串。
字符串?
SetEntry根據(jù)Key修改一個(gè)值,存在則覆蓋。(只能設(shè)置字符串)
SetEntryIfNotExists根據(jù)Key設(shè)置一個(gè)值,僅僅當(dāng)Key不存在時(shí)有效,如Key已存在則不修改(只支持字符串)
SetEntryIfNotExists根據(jù)Key設(shè)置一個(gè)值,返回舊值。
GetEntryType

根據(jù)Key獲取當(dāng)前存儲(chǔ)的值是什么類型:

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

  

  

  3、內(nèi)置集合

  比如,IRedisClient支持在內(nèi)部維護(hù)如下集合類型的數(shù)據(jù):

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

  關(guān)于如下4種類型數(shù)據(jù)的操作:

方法說明
AddItemToList添加一個(gè)項(xiàng)到內(nèi)部的List<T>
AddItemToSet添加一個(gè)項(xiàng)到內(nèi)部的HashSet<T>
AddItemToSortedSet添加一個(gè)項(xiàng)到內(nèi)部的排序List<T>,其中重載方法多了個(gè)score:排序值。優(yōu)先按照score從小->大排序,否則按值小到大排序
AddRangeToList一次過將參數(shù)中的List<T>中的多個(gè)值添加入內(nèi)部的List<T>
AddRangeToSet一次過將參數(shù)中的HashSet<T>中的多個(gè)值添加入內(nèi)部的HashSet<T>
AddRangeToSortedSet一次過將參數(shù)中的List<T>中的多個(gè)值添加到內(nèi)部List<T>,重載方法的score表示排序值。
GetAllItemsFromList獲取指定ListId的內(nèi)部List<T>的所有值
GetAllItemsFromSet獲取指定SetId的內(nèi)部HashSet<T>的所有值
GetAllItemsFromSortedSet獲取指定ListId的內(nèi)部已排序List<T>的所有值
GetAllItemsFromSortedSetDesc獲取指定ListId的內(nèi)部已排序List<T>的所有值,不過獲取的值是倒序排列后的。
GetRangeFromList獲取指定ListId的內(nèi)部List<T>中指定下標(biāo)范圍的數(shù)據(jù)
GetRangeFromSortedList獲取指定ListId的內(nèi)部已排序List<T>中指定下標(biāo)范圍的數(shù)據(jù)
GetRangeFromSortedSet獲取指定SetId的內(nèi)部HashSet<T>中指定下標(biāo)范圍的數(shù)據(jù)
GetRangeFromSortedSetByHighestScore獲取指定SetId的內(nèi)部HashSet<T>中按照score由高->低排序后的分值范圍的數(shù)據(jù),并且支持skip、take
GetRangeFromSortedSetByLowestScore同上,只不過是按score分值由低->高取一定范圍內(nèi)的數(shù)據(jù)
GetRangeFromSortedSetDesc按倒序獲取內(nèi)部HashSet<T>的指定下標(biāo)范圍內(nèi)的數(shù)據(jù)
GetRangeWithScoresFromSortedSet與From相同,只不過獲取的是鍵值對,數(shù)據(jù)中帶分值score
GetRangeWithScoresFromSortedSetByHighestScore同上
GetRangeWithScoresFromSortedSetByLowestScore同上
GetRangeWithScoresFromSortedSetDesc同上
GetAllWithScoresFromSortedSet獲取指定ListId的已排序的內(nèi)部List<T>與其score
GetSortedItemsFromList從指定ListId的List<T>中獲取按指定排序的集合,支持Skip,Take
GetSortedEntryValues從指定ListId的List<T>中獲取經(jīng)過排序指定開始位置與個(gè)數(shù)的項(xiàng)
RemoveAllFromList移除指定ListId的內(nèi)部List<T>
RemoveItemFromList移除指定ListId的內(nèi)部List<T>中第二個(gè)參數(shù)值相等的那一項(xiàng)
RemoveItemFromSet從指定SetId的內(nèi)部HashSet<T>中移除與第二個(gè)參數(shù)值相等的那一項(xiàng)
RemoveItemFromSortedSet從指定ListId中已排序的內(nèi)部List<T>中移除值相等的那一項(xiàng)
RemoveRangeFromSortedSet從指定ListId已排序的List<T>中移除指定下標(biāo)范圍的項(xiàng)
RemoveRangeFromSortedSetByScore從指定ListId已排序的List<T>中移除指定score范圍的項(xiàng)
RemoveStartFromList從指定ListId移除開頭那一項(xiàng)
RemoveEndFromList從指定ListId移除末尾那項(xiàng)
BlockingRemoveStartFromList阻塞地從指定ListId移除開頭那一項(xiàng)
BlockingRemoveStartFromLists?
RemoveEntry根據(jù)傳入的多個(gè)ListId,清除多個(gè)內(nèi)部List<T>
RemoveAllLuaScripts清除所有的?Lua 腳本緩存
RemoveEntryFromHash?
GetItemFromList根據(jù)ListId和下標(biāo)獲取一項(xiàng)
GetItemIndexInSortedSet根據(jù)List和值,獲取內(nèi)置的排序后的List<T>的下標(biāo)
GetItemIndexInSortedSetDesc同上,不過順序相反
GetItemScoreInSortedSet根據(jù)傳入的ListId和值獲取內(nèi)置List<T>項(xiàng)的score
GetListCount根據(jù)ListId,獲取內(nèi)置的List<T>的項(xiàng)數(shù)
GetSetCount根據(jù)SetId,獲取內(nèi)置的HashSet<T>的項(xiàng)數(shù)
GetIntersectFromSets從輸入的多個(gè)HashSet<T>的Id中獲取交集
GetUnionFromSets從輸入的多個(gè)HashSet<T>的Id中獲取并集
GetRandomItemFromSet從指定ListId的集合中獲取隨機(jī)項(xiàng)
StoreUnionFromSets將多個(gè)HashSet<T>,合并為第一個(gè)參數(shù)中的一個(gè)大HashSet<T>,第一個(gè)參數(shù)中的HashSet<T>原本可以不存在
StoreUnionFromSortedSets將多個(gè)SortedSet<T>,合并為第一個(gè)參數(shù)中的一個(gè)大SortedSet<T>,第一個(gè)參數(shù)中的SortedSet<T>原本可以不存在
StoreIntersectFromSets將交集結(jié)果保存在第一個(gè)參數(shù)的集合中,對HastSet<T>作用
StoreIntersectFromSortedSets將交集結(jié)果保存在第一個(gè)參數(shù)的集合中,對SortedSet<T>作用
EnqueueItemOnList將一個(gè)元素存入指定ListId的List<T>的頭部
DequeueItemFromList將指定ListId的List<T>末尾的那個(gè)元素出列,返回出列元素
BlockingDequeueItemFromList將指定ListId的List<T>末尾的那個(gè)元素出列,區(qū)別是:會(huì)阻塞該List<T>,支持超時(shí)時(shí)間,返回出列元素
BlockingDequeueItemFromLists?
BlockingPopItemFromList阻塞地將指定ListId的List<T>末尾的哪一個(gè)元素移除
BlockingPopItemFromLists?
BlockingPopAndPushItemBetweenLists將第一個(gè)集合的元素移除并添加到第二個(gè)集合的頭部,返回該元素,會(huì)同時(shí)阻塞兩個(gè)集合
PopItemFromList從指定ListId的List<T>末尾移除一項(xiàng)并返回
PopItemFromSet從指定SetId的HashSet<T>末尾移除一項(xiàng)并返回
PopItemWithHighestScoreFromSortedSet從指定SetId的HashSet<T>移除score最高的那一項(xiàng)
PopItemWithLowestScoreFromSortedSet從指定SetId的HashSet<T>移除score最低的那一項(xiàng)
PopAndPushItemBetweenLists將第一個(gè)集合的元素移除并添加到第二個(gè)集合的頭部
SetContainsItem判斷指定SetId的HashSet<T>中是否包含指定的value(僅僅支持字符串)
SortedSetContainsItem判斷SortedSet是否包含一個(gè)鍵
TrimList根據(jù)ListId裁剪內(nèi)置集合,保留下去from->at之間(包含from于at)的元素,其余的裁去
IncrementItemInSortedSet為指定ListId的集合中的value的分值score加上指定分值
SetItemInList重新設(shè)置指定ListId和下標(biāo)的value為指定值
PushItemToList在指定ListId的內(nèi)置List<T>中入列一個(gè)鍵值對,在末尾
PrependItemToList將一個(gè)值插入到List<T>的最前面
PrependRangeToList一次性添加多個(gè)值到指定ListId的內(nèi)置List<T>中
GetDifferencesFromSet返回存在于第一個(gè)集合,但是不存在于其他集合的數(shù)據(jù)。差集
StoreDifferencesFromSet將求差集的結(jié)果保存在第一個(gè)參數(shù)的集合中
MoveBetweenSets將元素從一個(gè)集合移動(dòng)到另一個(gè)集合的開頭。(刪除與添加)

  下面僅給出一個(gè)List<T>與HashSet<T>的示例:

//內(nèi)部維護(hù)一個(gè)List<T>集合RClient.AddItemToList("蜀國", "劉備");RClient.AddItemToList("蜀國", "關(guān)羽");RClient.AddItemToList("蜀國", "張飛");List<string> ListString = RClient.GetAllItemsFromList("蜀國");foreach (string str in ListString){Response.Write(str); //輸出 劉備 關(guān)羽 張飛}RClient.AddItemToSet("魏國", "曹操");RClient.AddItemToSet("魏國", "曹操");RClient.AddItemToSet("魏國", "典韋");HashSet<string> HashSetString = RClient.GetAllItemsFromSet("魏國");foreach (string str in HashSetString){Response.Write(str); //輸出 典韋 曹操}

?  下面再給一個(gè)范圍Range操作示例:

//內(nèi)部維護(hù)一個(gè)List<T>集合RClient.AddItemToSortedSet("蜀國", "劉備", 5);RClient.AddItemToSortedSet("蜀國", "關(guān)羽", 2);RClient.AddItemToSortedSet("蜀國", "張飛", 3);IDictionary<String,double> DicString = RClient.GetRangeWithScoresFromSortedSet("蜀國", 0, 2);foreach (var r in DicString){Response.Write(r.Key + ":" + r.Value); //輸出 }

?  3、內(nèi)置Hash

  內(nèi)部維護(hù)一個(gè)HashTable

方法說明
SetEntryInHash設(shè)置一個(gè)鍵值對入Hash表,如果哈希表的key存在則覆蓋
SetEntryInHashIfNotExists當(dāng)哈希表的key未被使用時(shí),設(shè)置一個(gè)鍵值對如Hash表
GetHashValues根據(jù)HashId獲取多個(gè)改HashId下的多個(gè)值
GetValuesFromHash根據(jù)HashId和Hash表的Key獲取多個(gè)值(支持多個(gè)key)
GetValueFromHash根據(jù)HashId和Hash表的Key獲取單個(gè)值
GetHashKeys獲取指定HashId下的所有Key
GetHashValues獲取指定HashId下的所有值
GetHashCount獲取指定HashId下的所有Key數(shù)量
HashContainsEntry判斷指定HashId的哈希表中是否包含指定的Key
IncrementValueInHash將指定HashId的哈希表中的值加上指定值
StoreAsHash將一個(gè)對象存入Hash(支持泛型)
GetFromHash根據(jù)Id從Hash表中取出對象(支持泛型)
SetRangeInHash通過IEnumerable<KeyValuePair<string, string>>一次性設(shè)置多個(gè)值,當(dāng)內(nèi)部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 版本開始,通過內(nèi)置的 Lua 解釋器,可以執(zhí)行各種Lua腳本。IRedisClient支持執(zhí)行Lua腳本,其供用于執(zhí)行Lua腳本的方法如下:

方法說明
LoadLuaScript將一個(gè)腳本裝入腳本緩存,但并不立即運(yùn)行它
KillRunningLuaScript停止正在運(yùn)行的指定Id的腳本
ExecLuaAsInt?
ExecLuaAsList?
ExecLuaAsString?
ExecLuaShaAsInt?
ExecLuaShaAsList?
ExecLuaShaAsString?
HasLuaScript判斷Lua腳本是否在腳本緩存里
CalculateSha1?
WhichLuaScriptsExists?

  關(guān)于Lua腳本可以到這里去了解:http://www.cnblogs.com/ly4cn/archive/2006/08/04/467550.html

  5、事務(wù)

  Redis中的事務(wù)

方法說明
Watch監(jiān)視一個(gè)(或多個(gè)) key ,如果在事務(wù)執(zhí)行之前這個(gè)(或這些) key 被其他命令所改動(dòng),那么事務(wù)將被打斷。
UnWatch取消 WATCH 命令對所有 key 的監(jiān)視
AcquireLock申請對一個(gè)Key加鎖(期間其他對象不能訪問)
CreateTransaction創(chuàng)建一個(gè)事務(wù),返回一個(gè)IRedisTransaction對象
CreateSubscription創(chuàng)建一個(gè)訂閱事件返回一個(gè)IRedisSubscription對象
CreatePipeline返回一個(gè)IRedisPipeline對象

轉(zhuǎn)載于:https://www.cnblogs.com/YuanZhaoBest/p/4095525.html

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。