Asp.net中的Cache--HttpRuntim.Cache 和 HttpContext.Current.Cache
在ASP.NET中有兩個類都提供緩存支持, 一個是HttpRuntime類的Cache屬性, 另一個是HttpContext類的Cache屬性. 通過查看這兩個屬性的類型可以發現其實這兩個屬性都是System.Web.Caching.Cache類的實例.那為什么需要同時提供兩種支持呢? 查詢MSDN后發先,這兩個緩存的應用的場景不一樣, HttpRuntime.Cache是應用程序級別的緩存, HttpContext.Current.Cache是針對Web上下文定義的, 是一個局部的緩存.(這段話需要進一步求證)
緩存的作用
ASP.NET是一種動態頁面技術,用ASP.NET技術做出來的網頁幾乎都是動態的,所謂動態是指:頁面的內容會隨著不同的用戶或者持續更新的數據, 而呈現出不同的顯示結果。既然是動態的,那么這些動態的內容是從哪里來的呢?我想絕大多數網站都有自己的數據源, 程序通過訪問數據源(如數據庫系統, 文件系統)獲取頁面所需的數據,然后根據一些業務規則的計算處理,最后變成適合頁面展示的內容。
由于這種動態頁面技術通常需要從數據源獲取數據,并經過一些計算邏輯,最終變成一些HTML代碼發給客戶端顯示。而這些計算過程顯然也是有成本的。 這些處理成本最直接可表現為影響服務器的響應速度,尤其是當數據的處理過程變得復雜以及訪問量變大時,會變得比較明顯。 另一方面,有些數據并非時刻在發生變化,如果我們可以將一些變化不頻繁的數據的最終計算結果(包括頁面輸出)緩存起來, 就可以非常明顯地提升程序的性能,緩存的最常見且最重要的用途就體現在這個方面。 這也是為什么一說到性能優化時,一般都將緩存擺在第一位的原因。 我今天要說到的ASP.NET Cache也是可以實現這種緩存的一種技術。 不過,它還有其它的一些功能,有些是其它緩存技術所沒有的。
緩存的用法
創建緩存和讀取緩存, 這是緩存的基本用法. 讀取緩存通過Cache.Get(key) 或 Cache[key], 而創建緩存的方式有兩種Add和Insert, 這兩種方式的差別在與: 當要創建的緩存已經存在時, Insert會覆蓋原有的緩存項, 而Add不會.
緩存的過期時間
ASP.NET支持二種緩存項的過期策略:絕對過期和滑動過期。
1. 絕對過期,這個容易理解:就是在緩存放入Cache時,指定一個具體的時間。當時間到達指定的時間的時,緩存項自動從Cache中移除。
2. 滑動過期:某些緩存項,我們可能只希望在有用戶在訪問時,就盡量保留在緩存中,只有當一段時間內用戶不再訪問該緩存項時,才移除它, 這樣可以優化內存的使用,因為這種策略可以保證緩存的內容都是【很熱門】的。 操作系統的內存以及磁盤的緩存不都是這樣設計的嗎?而這一非常有用的特性,Cache也為我們準備好了,只要在將緩存項放入緩存時, 指定一個滑動過期時間就可以實現了。
以上二個選項分別對應Add, Insert方法中的DateTime absoluteExpiration, TimeSpan slidingExpiration這二個參數。
注意:這二個參數都是成對使用的,但不能同時設置它們,最多只能一個參數值有效。也就是當設置absoluteExpiration時,?slidingExpiration就必須設置為NoSlidingExpiration, ?而當設置slidingExpiration時,absoluteExpiration必須設置為NoAbsoluteExpiration
緩存依賴項
緩存對象中的項可以與文件、緩存鍵、文件或緩存鍵的數組或另一個 CacheDependency 對象之間建立依附性關系。 CacheDependency 類監視依附性關系,以便在任何這些對象更改時,自動移除該緩存項。
參考資料
http://www.cnblogs.com/fish-li/archive/2011/12/27/2304063.html
總結
以上是生活随笔為你收集整理的Asp.net中的Cache--HttpRuntim.Cache 和 HttpContext.Current.Cache的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Go runtime的调度器
- 下一篇: centos7+samba 安装与调试记