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

微軟企業庫4.1學習筆記(十七)緩存模塊5 緩存

系統 1566 0

  本節介紹開發者在使用緩存的時候,常用的方法。每個方法在實際開發中都可以找到對應的用處,會有代碼示例。分兩個部分介紹,第一個部分包括下面的一些用法:

  •   向緩存添加數據,Add方法,如何向緩存中添加數據,設置過期,設置優先級。
  •   從緩存中刪除數據,Remove方法
  •   從緩存中獲取數據,GetData方法
  •   清空緩存,Flush方法

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

  1.1向緩存中添加數據

  需要緩存的數據,在創建和傳輸的時候都是很消耗性能的。例如,一個零售商的應用系統,一些列產品數據需要從數據訪問組件傳遞給用戶顯示組件,然后才可以顯示在用戶界面。代表顯示世界的實體類Products和Orders,為了提升性能,一些數據會被放在緩存中。

  你需要向緩存中添加數據,同時為過期處理提供過期時間,為清除處理設置緩存的優先級,先清除優先級低的緩存項。

  使用CacheManager的Add方法,如果你沒有設置過期時間和優先級,會自動設置默認值,分別是NeverExpired永不過期和Normal正常。如果緩存中已經存在相同key的項,會先移除舊項,然后添加新項。在這個過程中如果失敗的話,緩存值會恢復到原始值。

?

?

?

代碼
<!--<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方法向緩存中添加數據,設置優先級為Normal,過期之后沒有激活任何事件,過期時間為最后一次訪問之后的5分鐘。

  在刪除項的時候響應刪除事件,更新緩存。

  在Add方法中,我們可以指定一個實現了ICacheItemRefreshAction接口的類方法,當從緩存中刪除項的時候,就會更新緩存的數據。

?

代碼
<!--<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
????}

?

  如果要接收移除緩存項的通知的話,需要在Add方法中設置參數

?

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

?

  要點:

  •   你可以使用整合Unity的方式創建對象實例。
  •   如果向配置了使用數據庫作為后端存儲的緩存中添加項的話,添加的項必須是可序列化的,添加Serializable特性。
  •   當使用數據庫作為后端存儲的時候,實現ICacheItemRefreshAction的類必須要可序列化,添加Serializable特性。

  1.2從緩存中刪除項

  根據添加項的時候設置的掃描策略和過期策略,掃描和過期處理會自動從緩存中刪除項。你也可以手動移除某些項。

?

<!--<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從緩存中獲取數據

  使用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方法,將會清空緩存中的全部項,不管有沒有過期。

?

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

?  2、向緩存加載數據

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

  •   一次性加載,一次性將所需的數據加載到緩存中,方便后面的時候
  •   根據請求加載,當發生數據請求的時候才加載數據到緩存

  2.1一次性加載

  當應用啟動的時候,一次性加載需要的數據。

  優點:

  因為你可以確保數據已經被加載到緩存中,理論上你不用判斷緩存的狀態。但是,在獲取數據之前需要檢查數據是否存在于緩存中,因為有可能緩存被清空了。

  因為你使用緩存,應用的性能會提升,應用的響應也會更快。

  缺點:

  一次性緩存全部數據,沒有最大的提升系統的性能,因為花費時間緩存的數據,包括了一些沒有必要的數據。如果應用有100個處理請求,登錄者登錄之后只是處理了1個,那么其他緩存的請求就沒有必要了。

  推薦的一次性加載方式

  當你在應用啟動或者初始化的時候一次性家在大量數據的話,最好使用后臺線程進行異步加載,如果你不正確的使用一次性加載的方式,你的應用在初始化的時候會很慢。在下面的情形, 推薦使用一次性加載。

  •   對加載的數據的生命周期可控
  •   對加載的數據量可控,如果不知道要加載多少數據量的話,你有可能會耗盡系統的資源

  2.2根據請求加載數據

  優點:

  在應用初始化的時候,因為沒有加載大量的數據,系統資源沒有耗盡。不用加載一些不需要的數據。

  缺點:

  使用的時候,性能會有點下降,因為請求的數據可能沒有被緩存,而是從數據源獲取然后緩存。在從緩存中獲取之前,也需要檢查數據是否已經存在于緩存中。這種檢查可能會在你的代碼中加入過量的條件邏輯。

  推薦的根據請求加載數據的方式

  •   你需要一些數據,但是沒有資源加載保存全部的數據
  •   你需要的數據在初始化系統的時候不能加載,例如數據可能和用戶輸入的項有關系,例如用戶的一些信息。

  一次性加載數據到緩存的代碼示例

?

代碼
<!--<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);
????????????}
????????}

?

?

  下面是一段根據請求加載數據到緩存的代碼示例

?

代碼
<!--<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的項,如果沒有就從數據源獲取,然后加入緩存并且返回數據。

  未完待續。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

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


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 深夜在线网站 | 毛片免费观看久久欧美 | 99视频在线免费看 | 九九爱这里只有精品 | 亚洲黄色网址大全 | 亚洲欧美日韩一区成人 | 久久影院一区二区三区 | 96影院 | 天天操夜夜爱 | 国产在线精品一区二区 | 午夜噜噜噜私人影院在线播放 | 欧美色网 | 国产精品久久久久久久久免费观看 | 狠狠躁夜夜躁人人爽天天3 狠狠躁夜夜躁人人爽天天miya | 久久er热这里只有精品免费 | 欧美成人日韩 | 天天操天天添 | 深夜福利国产精品亚洲尤物 | 婷婷国产成人久久精品激情 | 国产成人精品视频免费 | 羞羞网站在线播放 | 久久综合给合久久狠狠狠色97 | 久久黄色精品视频 | 咪咪色网| 亚洲国产成人久久综合碰 | 亚洲一区二区三区免费看 | 久色阁| 午夜论坛| 成人免费视频一区二区 | 国产欧美日韩精品一区二区三区 | 成人精品视频在线 | 亚洲国产精久久久久久久 | 何以笙箫默在线观看 | 一级毛片不收费 | 国产成人久久精品一区二区三区 | 国产精品福利在线观看免费不卡 | www.中文字幕.com| 久久免费精品视频在线观看 | 国产精品高清久久久久久久 | 婷婷在线网站 | 亚洲综合激情另类图片专区 |