程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> IsLine FrameWork系列之十一--HttpContentProvider訪問緩存

IsLine FrameWork系列之十一--HttpContentProvider訪問緩存

編輯:關於.NET

今天我們來介紹 IsLine.HttpContent.HttpContentProvider命名空間:

這個Provider主要封裝了對緩存、Session與Cooike的操作,該空間下主要有三個類:CookieProvider、SessionProvider、CacheProvider。

關於約束

這三個類庫統一實現ICapability接口,ICapability繼承自IBaseCapability接口,IBaseCapability規范了HttpContentProvider的基礎能力,而ICapability則是對基礎能力的擴展,如下:

代碼

namespace IsLine.HttpContent.HttpContentProvider
{
   public interface IBaseCapability
   {
     bool Remove(string Name);
     bool IsExit(string Name);
   }
   public interface ICapability : IBaseCapability
   {
     object GetContent(string Name);
     bool UpdateContent(string Name, object value);
   }
}

可以看出,接口主要約束了如何刪除、獲得與更新一個對象,即約束了Session、Cookie、Cache的行為。

CacheProvider類

首先來看看有關Cache的操作,CacheProvider支持.Net兩種類型的Cache:運行時 Cache(HttpRuntime.Cache)與上下文Cache(HttpContext.Current.Cache),這兩種Cache有什麼區別呢?這裡簡單的解釋一下:

HttpRuntime.Cache是Application級別的,而HttpContext.Current.Cache是僅對當前WEB頁面請求才有效的。換句話說,HttpRuntime Cache所有的web與非web程序都可以調用,而HttpContext則只能用在WEB中。

緩存中的數據是易失的,數據並不是在整個應用程序生命周期中都存儲在內存中,由 ASP.NET 管理緩存,它會在項過期、無效、或內存不足時移除緩存中的項。還可以配置應用程序緩存,以便在移除項時通知應用程序。所以,你並不知道緩存在什麼時候會失效,即使你已經配置了依賴項。

關於緩存的過期有2種類型:

過期類型 說明 滑動窗口 指定某項自上次被訪問後多長時間過期。 絕對過期 指定某項在設定的時間過期,而不考慮訪問頻率。

可以將緩存中某一項的生存期配置為依賴於其他應用程序元素,如某個文件或數據庫。當緩存項依賴的元素更改時,ASP.NET 將從緩存中移除該項。

CacheProvider類支持以下2種依賴:

  說明 文件依賴項 緩存中的項依賴於外部文件。如果該文件被修改或刪除,則緩存項也會被移除。 SQL 依賴項 緩存中的項依賴於 Microsoft SQL Server 2005、SQL Server 2000 或 SQL Server 7.0 數據庫中表的更改。對於 SQL Server 2005,緩存中的項可依賴於表中的某一行。

使用CacheProvider中的方法

方法 說明 CacheProvider() 構造函數 CacheProvider(string cacheName) 構造函數,參數指明了需要操作的緩存名稱 CacheProvider(CacheType useCacheType, string cacheName, CacheDependencyType cdt,object depend) 構造函數,CacheType指明緩存類型,可以是運行時或上下文Cache,默認為運行時Cache;cacheName為需要操作的緩存名稱;CacheDependencyType為依賴項類型,可以是sql或文件;
depend為具體依賴項 Object GetContent() 獲得默認緩存內容 Object GetContent(string Name) 獲得緩存內容,參數指明了需要操作的緩存名稱 Bool UpdateContent(object o) 更新或新建默認緩存內容 Bool UpdateContent(string Name,object o) 更新或新建緩存內容,參數指明了需要操作的緩存名稱 bool Remove() 移除默認緩存 bool Remove(string Name) 移除緩存,參數指明了需要操作的緩存名稱 bool IsExit() 判斷默認緩存是否存在 bool IsExit(string Name) 判斷緩存是否存在,參數指明了需要操作的緩存名稱

緩存依賴項可以以參數方式統一傳入,這樣方便了開發人員。SQL緩存只針對SQL SERVER數據庫有效,指定使用文件緩存還是數據庫緩存,可以通過CacheDependencyType參數達到目的,CacheDependencyType是一個枚舉值,在IsLine.HttpContent.HCDataTypeEnum命名空間下,IsLine.HttpContent.HCDataTypeEnum命名空間:

代碼

namespace IsLine.HttpContent.HCDataTypeEnum
{
   public enum DateType
   {
     Days,
     Hours,
     Years,
     Minutes
   }

   public enum CacheType
   {
     HttpRuntime,
     HttpContext
   }

   public enum CacheDependencyType
   {
     Sql,
     File,
     None
   }

   public enum RemoveType
   {
     RemoveInput,
     RemoveAllExcludeInput
   }
}

需要注意的是,即使使用CacheProvider(string cacheName)指明了需要操作的Cache,但是如果後面的代碼中,實例調用的方法中包含其他Cache的名稱,那麼以後使用不帶Cache名稱參數的方法時,將會操作那個新的Cache,而忽略構造函數中指明的Cache。

例如:

CacheProvider cp = new CacheProvider(“A”);
cp.GetContent();   //這一步將獲得Cache“A”的內容
cp.IsExit(“B”)    //這一步檢測Cache“B”是否存在
cp.GetContent();   //這一步將獲得Cache“B”的內容,而不是構造函數中的Cahce“A”

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved