天天看點

ASP.NET 緩存(6)ASP.NET 緩存(6)

資料緩存

資料緩存是最靈活的緩存方式,但是它頁強制你采取專用的步驟來實作。基本的原則是你添加那些建立起來比較昂貴的項到專用的内建的集合對象中(Cache類)。這個對象工作起來有點像Application。他對所有的請求都可見,當然們也有一些不同的地方:

Cache對象是線程安全的:這意味着,你不需要在添加或者删除項的時候顯式的加鎖。

cache中的項會被自動的删除。ASP.NET會删除過期項,或者當記憶體很少的時候也會删除。這意味着你可以自由的使用cache而不需要擔心浪費伺服器記憶體。也因為這一點,你不知道cache項是否被删除了,所有你在使用的時候要檢查是否還存在。

cache中的項支援依賴性:你能夠将緩存的對象關聯到一個檔案,或者資料庫的表或者其他任何資源,如果這些資源改變,你的緩存對象也會自動的失效并且被釋放。

緩存對象存儲于應用程式程序中,這意味着當應用程式被重新開機,緩存也就沒有了,并且它也不能在多個計算機中共享。這是故意這麼設計的,因為多個計算機程序間通信會損害性能。

Cache.Insert,Cache.Remove,使用比較簡單,可以自行查閱msdn。

此處說一下Cache.Insert的一個重載方法

<a href="http://msdn.microsoft.com/zh-cn/library/05kd8d77.aspx">Insert(String, Object, CacheDependency, DateTime, TimeSpan, CacheItemPriority, CacheItemRemovedCallback)</a>

最後2項參數,一個是CacheItemPriority,一個是CacheItemRemovedCallback。

CacheItemPriority的用處是指明優先級,當緩存由于記憶體不夠時,要清除一些緩存的時候,就會按照這個優先級來清除。

Low,在伺服器釋放系統記憶體時,具有該優先級級别的緩存項最有可能被從緩存删除。

BelowNormal,在伺服器釋放系統記憶體時,具有該優先級級别的緩存項比配置設定了 Normal 優先級的項更有可能被從緩存删除。

Normal,在伺服器釋放系統記憶體時,具有該優先級級别的緩存項很有可能被從緩存删除,其被删除的可能性僅次于具有 Low 或 BelowNormal 優先級的那些項。 這是預設值。

AboveNormal,在伺服器釋放系統記憶體時,具有該優先級級别的緩存項被删除的可能性比配置設定了 Normal 優先級的項要小。

High,在伺服器釋放系統記憶體時,具有該優先級級别的緩存項最不可能被從緩存删除。

NotRemovable,在伺服器釋放系統記憶體時,具有該優先級級别的緩存項将不會被自動從緩存删除。 但是,具有該優先級級别的項會根據項的絕對到期時間或可調整到期時間與其他項一起被移除。

Default,緩存項優先級的預設值為 Normal。

CacheItemRemovedCallback是一個委托,簽名如下:public delegate void CacheItemRemovedCallback( string key, Object value, CacheItemRemovedReason reason ) 

當緩存被删除的是會調用該回調方法。相應的還有一個 CacheItemUpdateCallback委托,在Insert的另一個重載方法中。

看如下示例代碼:

protected void Page_Load(object sender, EventArgs e)

       {

           Cache.Insert("Key1", "value", null, DateTime.Now.AddDays(10), Cache.NoSlidingExpiration, CacheItemPriority.Default, (x, y, z) =&amp;gt; { Response.Write(x.ToString() + y.ToString() + z.ToString()); });//采用拉姆達表達式,簡便

           //Cache.Insert("Key1", "value", null, DateTime.Now.AddDays(10), Cache.NoSlidingExpiration, CacheItemPriority.Default, RemovedCallback);//采用傳統的定義一個方法的方式,把方法名作為委托的參數。

           if (Cache["Key1"] != null)

               Cache.Remove("Key1");

       }

       public void RemovedCallback(String k, Object v, CacheItemRemovedReason r)

           Response.Write(k.ToString() + v.ToString() + r.ToString());

上面的代碼定義了一個委托。當該緩存被删除的時候,調用該委托方法。上面的例子中,插入一個緩存,然後馬上删除,它會調用方法,在頁面上列印出Key1valueRemoved。

本文轉自cnn23711151CTO部落格,原文連結:http://blog.51cto.com/cnn237111/589129 ,如需轉載請自行聯系原作者

繼續閱讀