System.Web.Caching.Cache的簡單介紹

在.net的web應用中,很多時候需要在當前應用程序下緩存一些數據比如驗證碼、登陸狀態,我們可以自己創建一個靜態類然後將數據放入其中來實現類似效果,但是使用應用程序的Cache更爲方便,而且其性能好、能實現滑動過期之類的更加增加了它的實用性。
這裏僅僅討論它的概念和簡單使用。
本文參考微軟官方網站:System.Web.Caching.Cache

討論對象

System.Web.Caching.Cache
命名空間: System.Web
程序集: System.Web(位於 System.Web.dll)

對象介紹

  • 實現用於 Web 應用程序的緩存。無法繼承此類。
  • 對於每個應用程序域均創建該類的一個實例,並且只要對應的應用程序域保持活動,該實例便保持有效。
  • 有關此類實例的信息通過 HttpContext 對象的 Cache 屬性或 Page 對象的 Cache 屬性來提供。

應用範圍是web應用程序,並且每個程序下只會存在一個緩存實例。其內部是鍵值對組成的一個表,相當於一個緩存表的概念吧。

使用方式

直接實例化對象
使用非常簡單,直接實例化一個cache對象就能使用cache對象的Insert、Remove等方法。

System.Web.Caching.Cache cache =new System.Web.Caching.Cache();
cache.Insert("key1","value1");
var value1 = cache.Get("key1");

程序已經自動幫我們實現了一個緩存表我們只需要直接往裏面存取數據就行了,非常方便呢。

請注意,當前應用程序只會存在一個cache對象,不論你實例化幾個cache對象都擁有相同的key和value、都指向當前應用緩存、指向當前緩存表。實際上緩存在你創建應用時已經被創建好了,你實例化cache對象只是調用了它一下,其實你根本不需要實例化,直接使用就行了。

HttpRuntime.Cache
用途:獲取當前應用程序的 Cache。
命名空間:System.Web
程序集:System.Web(在 system.web.dll 中)
類型:System.Web.Caching.Cache
這裏寫圖片描述
爲了方便我們使用緩存時不用每次實例化,便有了HttpRuntime.Cache,我們在使用時可以直接通過如下方式來使用調用當前應用程序的cache:

         HttpRuntime.Cache.Insert("key1","value1");
         var value1 = HttpRuntime.Cache.Get("key1");

是不是很簡單很方便。

請注意,雖然Cache寫的是Web應用程序下使用,但是實際中可以通過HttpRuntime.Cache在控制檯等其它應用程序下使用,因爲HttpRuntime.Cache是應用程序級別的。

其它兩種使用方式
這兩種使用方式分別是:HttpContext.Current.Cache、HttpContext.Current.Cache

   HttpContext.Current.Cache.Insert("key1", 1);
   Page.Cache.Insert("key2", 2);

細心的你已經發現,在上面介紹Cache時有一句“有關此類實例的信息通過 HttpContext 對象的 Cache 屬性或 Page 對象的 Cache 屬性來提供”,便是這兩種使用方式。那爲什麼還會有HttpRuntime.Cache的使用方式呢?
通過反編譯(自己可以試試)我們可以發現Page.Cache其實return 的就是HttpRuntime.Cache,至於HttpContext.Current.Cache,可以查看HttpContext.Current的定義
這裏寫圖片描述
其實HttpContext.Current.Cache就是Page.Cache,上下文都是同一個。
綜上:HttpContext.Current.Cache和Page.Cache是對HttpRuntime.Cache的封裝。級別不同而已,HttpRuntime.Cache應用程序級別,在大多數直接用HttpRuntime.Cache就夠了。

總結

  1. 主要用於Web應用。(其它應用有其它應用的緩存類,但是也是可以通過HttpRuntime.Cache在其它應用使用)
  2. 每個應用只有一個緩存實例,使用的時候沒必要實例化,直接調用
  3. 有三種方式來調用緩存實例,大多數情況下直接使用HttpRuntime.Cache
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章