標籤:public databases 例子 datetime date 時間 src localhost settings
緩衝是將資訊放在記憶體中以避免頻繁訪問資料庫從資料庫中提取資料,在系統最佳化過程中,緩衝是比較普遍的最佳化做法和見效比較快的做法。
對於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的緩衝就介紹到這裡。見識淺薄,有不當之處,還望大神們指點一二。
努力,不是為了要感動誰,也不是要做給哪個人看,而是要讓自己隨時有能力跳出自己厭惡的圈子,並擁有選擇的權利。記住,用自己喜歡的方式過一生。
淺談MVC緩衝