緩存是將信息放在內存中以避免頻繁訪問數據庫從數據庫中提取數據,在系統優化過程中,緩存是比較普遍的優化做法和見效比較快的做法。
對於MVC有Control緩存和Action緩存。
一、Control緩存
Control緩存即是把緩存應用到整個Control上,該Control下的所有Action都會被緩存起來。
我們來看一下例子:
[OutputCache(Duration = 10)] public class HomeController : Controller { // GET: Home public ActionResult Index() { ViewBag.CurrentTime = DateTime.Now; return View(); } }
view中:
@{ ViewBag.Title = "Index"; } <h2>@ViewBag.CurrentTime</h2>
效果:

不停的刷新頁面,時間會每10秒鍾更新一次。
二、Action緩存
將緩存加載Action上,這樣,只有加緩存的Action才會有緩存,其他的Action沒有。
寫法與Control的緩存一樣。
//Action緩存,10秒 [OutputCache(Duration = 10)] // GET: Home public ActionResult Index() { ViewBag.CurrentTime = DateTime.Now; return View(); } public ActionResult Index2() { ViewBag.CurrentTime = DateTime.Now; return View(); }
這里分別有兩個Action,一個加了緩存的Index,還有一個沒有加緩存的Index2
效果:
分別訪問這兩個頁面,不停的刷新這兩個頁面,Index 中的時間會10秒鍾更新一次,而Index2中會實時更新。
三、使用配置文件進行緩存配置
在MVC的Web.config文件中,可以對緩存進行相關的配置。
在system.web節點中,添加caching子節點,然后如下:
<outputCacheSettings>
<outputCacheProfiles>
<add name="TestConfigCache" duration="10" />
</outputCacheProfiles>
</outputCacheSettings>
配置好后,我們的Control緩存或者Action緩存就可以這么寫:
[OutputCache(CacheProfile= "TestConfigCache")] // GET: Home public ActionResult Index() { ViewBag.CurrentTime = DateTime.Now; return View(); }
四、緩存依賴
緩存數據是從數據庫中某個表獲取的,如果數據庫中對應的表的數據沒有發生改變,我們就沒有必要對緩存數據進行更新,如果數據庫對應的表的數據發生了變化,那么,我們相應的緩存數據就應立即更新。
那么緩存是否過期,依賴於數據庫對應的表中的數據是否發生變化。這就是緩存依賴。下面我們來寫一下。
我們MVC的Web.config文件中進行如下未配置:
1、首先配置數據庫連接字符串:
<connectionStrings>
<add name="sqlCon" connectionString="server=127.0.0.1;database=test;uid=sa;pwd=123456" providerName="System.Data.SqlClient" />
</connectionStrings>
2、進行緩存依賴配置:
<caching>
<sqlCacheDependency>
<databases>
<add name="PersonCacheDependency" connectionStringName="sqlCon" pollTime="500"/>
</databases>
</sqlCacheDependency>
<outputCacheSettings>
<outputCacheProfiles>
<add name="TestConfigCache" duration="3600" sqlDependency="PersonCacheDependency:Person"/>
</outputCacheProfiles>
</outputCacheSettings>
</caching>
其中pollTime為監聽數據庫變化的間隔時間(毫秒)
以上配置說明:庫名:test,監聽表名:Person。緩存時間為:3600秒即一小時。數據庫依賴周期為500毫秒,即每0.5秒監聽下數據庫是否有變化,如果有變化則立即更新緩存。
Control中或Action中:
[OutputCache(CacheProfile= "TestConfigCache")] // GET: Home public ActionResult Index() { ViewBag.CurrentTime = DateTime.Now; return View(); }
這樣,在一個小時內,只有Person表中的數據發生變化后,緩存才會更新,不然緩存不會更新。
五、注:
當我們配置完緩存以來后,運行我們的項目,可能會出現一下錯誤提示:

這是因為我們沒有對Person表啟用緩存通知。
打開vs命令工具行,輸入:aspnet_regsql -S localhost -U sa -P 123456 -ed -d test-et -t Person
這樣就可以解決上述錯誤。
好了,MVC的緩存就介紹到這里。見識淺薄,有不當之處,還望大神們指點一二。
