ASP.NET 緩存(6)

數據緩存數據庫

數據緩存是最靈活的緩存方式,可是它頁強制你採起專用的步驟來實現。基本的原則是你添加那些建立起來比較昂貴的項到專用的內建的集合對象中(Cache類)。這個對象工做起來有點像Application。他對全部的請求均可見,固然們也有一些不一樣的地方:緩存

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

cache中的項會被自動的刪除。ASP.NET會刪除過時項,或者當內存不多的時候也會刪除。這意味着你能夠自由的使用cache而不須要擔憂浪費服務器內存。也由於這一點,你不知道cache項是否被刪除了,全部你在使用的時候要檢查是否還存在。服務器

cache中的項支持依賴性:你可以將緩存的對象關聯到一個文件,或者數據庫的表或者其餘任何資源,若是這些資源改變,你的緩存對象也會自動的失效而且被釋放。
 ide

緩存對象存儲於應用程序進程中,這意味着當應用程序被重啓,緩存也就沒有了,而且它也不能在多個計算機中共享。這是故意這麼設計的,由於多個計算機進程間通訊會損害性能。性能

Cache.Insert,Cache.Remove,使用比較簡單,能夠自行查閱msdn。spa

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

Insert(String, Object, CacheDependency, DateTime, TimeSpan, CacheItemPriority, CacheItemRemovedCallback)設計

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

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) => { 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。

相關文章
相關標籤/搜索