概述
使用Cache高速緩存可以提高數據的讀取速度,減少服務器與客戶端之間的數據交互。因為Cache一經創建就會占用服務器上的資源,所以Cache並不是越多越好,一般用於數據較固定,使用較頻繁的地方。
Cache類的簡單使用方法
-
首先,我們需要引用命名空間System.Web.Caching;
-
Cache類的方法主要提供對緩存數據的編輯操作,如增、刪、改等。
在這里我們主要介紹Cache類的Add方法用於將數據添加到Cache對象
Add方法主要包含以下7個參數下:
-
參數“key”代表緩存數據項的鍵值,必須是唯一的。
-
參數“value”代表緩存數據的內容,可以是任意類型。
-
參數“dependencies”表示緩存的依賴項,也就是此項的更改意味着緩存內容已經過期。如果沒有依賴項,可將此值設置為NULL。
-
參數“absoluteExpiration”是日期型數據,表示緩存過期的時間,.NET 2.0提供的緩存在過期后是可以使用的,能使用多長時間,就看這個參數的設置。
-
參數“slidingExpiration”的類型表示一段時間間隔,表示緩存參數將在多長時間以后被刪除,此參數與absoluteExpiration參數相關聯。
-
參數“priority”表示撤銷緩存的優先值,此參數的值取自枚舉變量“CacheItemPriority”,優先級低的數據項將先被刪除。此參數主要用在緩存退出對象時。
-
參數“onRemoveCallback”表示緩存刪除數據對象時調用的事件,一般用做通知程序。
通過Add方法,我們可以像這樣簡單的創建一個Cache
Cache.Add(ID.ToString(), author, mydep, DateTime.Now.AddSeconds(60), TimeSpan.Zero, CacheItemPriority.Normal, null);
當Cache[ID.ToString()]不為null時,我們就可以直接從緩存中讀取數據。
- 如果想要刪除創建的緩存,可以通過Remove方法移除緩存項
Cache.Remove(ID.ToString());
Sql緩存依賴類:SqlCacheDependency類
我們在上面提到了通過設置緩存依賴項可以檢測緩存內容是否已經過期,一旦過期就應該及時更新。在這里我們使用SqlCacheDependency類來檢測數據庫的數據是否更新。
首先我們先來進行一些設置
- 打開Web.config配置文件,進行如下設置
<connectionStrings>
<add name="huxiu" connectionString="data source=(localdb)\v11.0;initial catalog=huxiu;integrated security=True;multipleactiveresultsets=True;" />
</connectionStrings>
<system.web>
<caching>
<sqlCacheDependency enabled="true" pollTime="1000">
<databases>
<add name="huxiu" connectionStringName="huxiu" />
</databases>
</sqlCacheDependency>
</caching>
其中pollTime單位為毫秒,意思是每隔1秒檢測下數據庫,檢測表是否有發生變化。connectionStringName應於上面connectionStrings中add name的名字相同。caching中的add name在后面創建緩存依賴項的時候會使用到。
- 通過命令行啟動數據庫緩存依賴項
在C盤中找到aspnet_regsql.exe位於的目錄,使用cmd命令行打開該目錄
在該目錄下輸入
aspnet_regsql -C "data source=(localdb)\v11.0;initial catalog=huxiu;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework"" -ed -et -t "dbo.Author"
其中-c后面為數據庫連接字符串,-t后面為數據庫中表的名稱

然后,繼續在該目錄下輸入如下代碼
以下這步不知道和上面的設置有沒有重復,如果出現VS中報錯無法連接到SQL 數據庫進行緩存依賴項輪詢可以嘗試繼續進行以下設置,沒有則可以跳過。
aspnet_regsql -S (localdb)\v11.0 -E -d dbname -ed
aspnet_regsql -S (localdb)\v11.0 -E -d dbname -t dbtable -et
其中dbname為數據庫名稱,dbtable為數據庫中表的名稱


- 創建緩存依賴項
使用以下代碼創建緩存依賴項
SqlCacheDependency mydep = new SqlCacheDependency("huxiu","Author");
其中的兩個參數分別為caching中的add name的名字和數據庫中表的名字
通過以上的步驟,我們就可以實現當數據庫被更改時通過SqlCacheDependency的HasChanged方法進行判斷,從而對緩存數據進行更新。
