亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

微軟企業(yè)庫4.1學(xué)習(xí)筆記(十七)緩存模塊5 緩存

系統(tǒng) 1764 0

  本節(jié)介紹開發(fā)者在使用緩存的時(shí)候,常用的方法。每個(gè)方法在實(shí)際開發(fā)中都可以找到對(duì)應(yīng)的用處,會(huì)有代碼示例。分兩個(gè)部分介紹,第一個(gè)部分包括下面的一些用法:

  •   向緩存添加數(shù)據(jù),Add方法,如何向緩存中添加數(shù)據(jù),設(shè)置過期,設(shè)置優(yōu)先級(jí)。
  •   從緩存中刪除數(shù)據(jù),Remove方法
  •   從緩存中獲取數(shù)據(jù),GetData方法
  •   清空緩存,F(xiàn)lush方法

  第二部分介紹緩存的加載。

  1.1向緩存中添加數(shù)據(jù)

  需要緩存的數(shù)據(jù),在創(chuàng)建和傳輸?shù)臅r(shí)候都是很消耗性能的。例如,一個(gè)零售商的應(yīng)用系統(tǒng),一些列產(chǎn)品數(shù)據(jù)需要從數(shù)據(jù)訪問組件傳遞給用戶顯示組件,然后才可以顯示在用戶界面。代表顯示世界的實(shí)體類Products和Orders,為了提升性能,一些數(shù)據(jù)會(huì)被放在緩存中。

  你需要向緩存中添加數(shù)據(jù),同時(shí)為過期處理提供過期時(shí)間,為清除處理設(shè)置緩存的優(yōu)先級(jí),先清除優(yōu)先級(jí)低的緩存項(xiàng)。

  使用CacheManager的Add方法,如果你沒有設(shè)置過期時(shí)間和優(yōu)先級(jí),會(huì)自動(dòng)設(shè)置默認(rèn)值,分別是NeverExpired永不過期和Normal正常。如果緩存中已經(jīng)存在相同key的項(xiàng),會(huì)先移除舊項(xiàng),然后添加新項(xiàng)。在這個(gè)過程中如果失敗的話,緩存值會(huì)恢復(fù)到原始值。

?

?

?

代碼
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> using ?System;
using ?System.Collections.Generic;
using ?System.Linq;
using ?System.Text;
using ?Microsoft.Practices.EnterpriseLibrary.Caching;
using ?Microsoft.Practices.EnterpriseLibrary.Common;
using ?Microsoft.Practices.EnterpriseLibrary.Caching.Expirations;

namespace ?BeautyCode.Entlib
{
????
public ? class ?Product
????{
????????
public ? string ?ID?{? get ;? set ;?}
????????
public ? string ?Name?{? get ;? set ;?}
????????
public ? decimal ?Price?{? get ;? set ;?}
????}
????
public ? class ?CacheTest
????{
????????
public ?CacheTest()
????????{
????????????ICacheManager?manager?
= ?CacheFactory.GetCacheManager();
????????????
string ?id? = ? " 11 " ;
????????????
string ?name? = ? " 土豆 " ;
????????????
decimal ?price? = ? 100 ;
????????????Product?product?
= ? new ?Product()?{?ID? = ?id,?kName? = ?name,?Price? = ?price?};

????????????manager.Add(id,?product,?CacheItemPriority.Normal,
null , new ?SlidingTime?(TimeSpan.FromMinutes?( 5 )));
????????}
????}
}

?

  在上面的代碼中,通過Add方法向緩存中添加數(shù)據(jù),設(shè)置優(yōu)先級(jí)為Normal,過期之后沒有激活任何事件,過期時(shí)間為最后一次訪問之后的5分鐘。

  在刪除項(xiàng)的時(shí)候響應(yīng)刪除事件,更新緩存。

  在Add方法中,我們可以指定一個(gè)實(shí)現(xiàn)了ICacheItemRefreshAction接口的類方法,當(dāng)從緩存中刪除項(xiàng)的時(shí)候,就會(huì)更新緩存的數(shù)據(jù)。

?

代碼
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> ?[Serializable]
????
public ? class ?ProductCacheRefeshAction?:?ICacheItemRefreshAction
????{
????????
#region ?ICacheItemRefreshAction?Members

????????
public ? void ?Refresh( string ?removedKey,? object ?expiredValue,?CacheItemRemovedReason?removalReason)
????????{
????????????
throw ? new ?NotImplementedException();
????????}

????????
#endregion
????}

?

  如果要接收移除緩存項(xiàng)的通知的話,需要在Add方法中設(shè)置參數(shù)

?

<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> ??manager.Add(id,?product,?CacheItemPriority.Normal, new ?ProductCacheRefeshAction?(), new ?SlidingTime?(TimeSpan.FromMinutes?( 5 )));

?

  要點(diǎn):

  •   你可以使用整合Unity的方式創(chuàng)建對(duì)象實(shí)例。
  •   如果向配置了使用數(shù)據(jù)庫作為后端存儲(chǔ)的緩存中添加項(xiàng)的話,添加的項(xiàng)必須是可序列化的,添加Serializable特性。
  •   當(dāng)使用數(shù)據(jù)庫作為后端存儲(chǔ)的時(shí)候,實(shí)現(xiàn)ICacheItemRefreshAction的類必須要可序列化,添加Serializable特性。

  1.2從緩存中刪除項(xiàng)

  根據(jù)添加項(xiàng)的時(shí)候設(shè)置的掃描策略和過期策略,掃描和過期處理會(huì)自動(dòng)從緩存中刪除項(xiàng)。你也可以手動(dòng)移除某些項(xiàng)。

?

<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> ?? public ? void ?Remove(CacheManager?cache,? string ?key)
????????{
????????????cache.Remove(key);
????????}

?

  1.3從緩存中獲取數(shù)據(jù)

  使用CacheManager的GetData方法

?

<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> ? public ?T?GetData < T > (CacheManager?cache, string ?key)
????????{
????????????
return ?(T)cache.GetData(key);
????????}

?

  1.4清空緩存

  使用CacheManager的Flush方法,將會(huì)清空緩存中的全部項(xiàng),不管有沒有過期。

?

<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> ? public ? void ?Flush(CacheManager?cache)
????????{
????????????cache.Flush();
????????}

?  2、向緩存加載數(shù)據(jù)

  在你從緩存獲取數(shù)據(jù)之前,需要先向緩存中添加一些數(shù)據(jù)。你可以通過兩種方式加載數(shù)據(jù):

  •   一次性加載,一次性將所需的數(shù)據(jù)加載到緩存中,方便后面的時(shí)候
  •   根據(jù)請(qǐng)求加載,當(dāng)發(fā)生數(shù)據(jù)請(qǐng)求的時(shí)候才加載數(shù)據(jù)到緩存

  2.1一次性加載

  當(dāng)應(yīng)用啟動(dòng)的時(shí)候,一次性加載需要的數(shù)據(jù)。

  優(yōu)點(diǎn):

  因?yàn)槟憧梢源_保數(shù)據(jù)已經(jīng)被加載到緩存中,理論上你不用判斷緩存的狀態(tài)。但是,在獲取數(shù)據(jù)之前需要檢查數(shù)據(jù)是否存在于緩存中,因?yàn)橛锌赡芫彺姹磺蹇樟恕?

  因?yàn)槟闶褂镁彺妫瑧?yīng)用的性能會(huì)提升,應(yīng)用的響應(yīng)也會(huì)更快。

  缺點(diǎn):

  一次性緩存全部數(shù)據(jù),沒有最大的提升系統(tǒng)的性能,因?yàn)榛ㄙM(fèi)時(shí)間緩存的數(shù)據(jù),包括了一些沒有必要的數(shù)據(jù)。如果應(yīng)用有100個(gè)處理請(qǐng)求,登錄者登錄之后只是處理了1個(gè),那么其他緩存的請(qǐng)求就沒有必要了。

  推薦的一次性加載方式

  當(dāng)你在應(yīng)用啟動(dòng)或者初始化的時(shí)候一次性家在大量數(shù)據(jù)的話,最好使用后臺(tái)線程進(jìn)行異步加載,如果你不正確的使用一次性加載的方式,你的應(yīng)用在初始化的時(shí)候會(huì)很慢。在下面的情形, 推薦使用一次性加載。

  •   對(duì)加載的數(shù)據(jù)的生命周期可控
  •   對(duì)加載的數(shù)據(jù)量可控,如果不知道要加載多少數(shù)據(jù)量的話,你有可能會(huì)耗盡系統(tǒng)的資源

  2.2根據(jù)請(qǐng)求加載數(shù)據(jù)

  優(yōu)點(diǎn):

  在應(yīng)用初始化的時(shí)候,因?yàn)闆]有加載大量的數(shù)據(jù),系統(tǒng)資源沒有耗盡。不用加載一些不需要的數(shù)據(jù)。

  缺點(diǎn):

  使用的時(shí)候,性能會(huì)有點(diǎn)下降,因?yàn)檎?qǐng)求的數(shù)據(jù)可能沒有被緩存,而是從數(shù)據(jù)源獲取然后緩存。在從緩存中獲取之前,也需要檢查數(shù)據(jù)是否已經(jīng)存在于緩存中。這種檢查可能會(huì)在你的代碼中加入過量的條件邏輯。

  推薦的根據(jù)請(qǐng)求加載數(shù)據(jù)的方式

  •   你需要一些數(shù)據(jù),但是沒有資源加載保存全部的數(shù)據(jù)
  •   你需要的數(shù)據(jù)在初始化系統(tǒng)的時(shí)候不能加載,例如數(shù)據(jù)可能和用戶輸入的項(xiàng)有關(guān)系,例如用戶的一些信息。

  一次性加載數(shù)據(jù)到緩存的代碼示例

?

代碼
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> ?? public ?List < Product > ?GetProductList()
????????{
????????????
return ? new ?List < Product > ();
????????}
????????
public ? void ?LoadAllProducts()
????????{
????????????ICacheManager?manager?
= ?CacheFactory.GetCacheManager();
????????????List
< Product > ?list? = ?GetProductList();
????????????
foreach ?(Product?p? in ?list)
????????????{
????????????????manager.Add(p.ID,?p);
????????????}
????????}

?

?

  下面是一段根據(jù)請(qǐng)求加載數(shù)據(jù)到緩存的代碼示例

?

代碼
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--> ?? public ?Product?GetByID( string ?productID)
????????{
????????????
return ? new ?Product();
????????}
????????
public ?Product??ReadProductByID( string ?productID)
????????{
????????????ICacheManager?manager?
= ?CacheFactory.GetCacheManager();
????????????Product?p?
= ?(Product)manager.GetData(productID);
????????????
if ?(p? == ? null )
????????????{
????????????????p?
= ?GetByID(productID);
????????????????
if ?(p? != ? null )
????????????????????manager.Add(productID,?p);
????????????}
????????????
return ?p;
????????}

?

?

  首先檢查緩存中是否存在相同key的項(xiàng),如果沒有就從數(shù)據(jù)源獲取,然后加入緩存并且返回?cái)?shù)據(jù)。

  未完待續(xù)。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

微軟企業(yè)庫4.1學(xué)習(xí)筆記(十七)緩存模塊5 緩存的典型用法


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 色综合久久88色综合天天 | 久久www免费人成_看 | 色婷婷色综合激情国产日韩 | 亚洲成在人线中文字幕 | 天天干天天操天天爽 | 国产成人啪精品视频免费网 | 国产精品自拍亚洲 | 国产高清美女一级a毛片久久 | 一级亚洲| 久久精品免费一区二区视 | 国产91在线播放 | 国产精品入口麻豆高清在线 | 国产精品一区二区久久精品 | 青春禁区视频在线观看动漫版 | 成人免费看毛片 | 中文字幕 二区 三区 搜查官 | 久草性视频 | 国产成人精品高清不卡在线 | 天天狠狠操 | 欧美一欧美一级毛片 | 波多野结衣中文一区二区免费 | 亚洲精品综合一区二区三区 | 五月色婷婷六月噜噜 | 深夜福利网址 | 亚洲欧美日韩在线观看二区 | 欧美精品国产 | 99国产热| 美女hdxxxx中国 | 国内偷自视频区视频综合 | 日本狠狠干 | 成年人一级黄色片 | 奇米影视7777777 | 亚洲人成在线免费观看 | 九九精品视频免费 | 正在播放国产精品 | 伊人色综合久久 | 夜夜爽天天狠狠九月婷婷 | 99在线精品国产不卡在线观看 | 国产精品www视频免费看 | 奇米网色 | 亚洲欧美一|