看到一個大神關於MVC緩存的學習文章,希望大家一起學習。 原文地址:http://www.cnblogs.com/iamlilinfeng/p/4419362.html 緩存介紹: 個人對於緩存的理解就是這樣子的。用戶訪問一個頁面A,後端找到A.cshtml之後還要各種構造~轉換~序列化。。。(我也 ...
看到一個大神關於MVC緩存的學習文章,希望大家一起學習。
原文地址:http://www.cnblogs.com/iamlilinfeng/p/4419362.html
緩存介紹:
個人對於緩存的理解就是這樣子的。用戶訪問一個頁面A,後端找到A.cshtml之後還要各種構造~轉換~序列化。。。(我也不是很懂~感覺有這些東西),然後把這些東西給用戶的界面。但是如果這個頁面有一個標題是綁定在資料庫的,那每次用戶訪問這個頁面都要練資料庫查詢數據然後再構造~轉換~序列化。。。。再給用戶頁面不很麻煩嗎?。如果用戶第一次訪問這個頁面的時候我們把這個頁面構造~轉換~序列化。。。之後的成品保存下來,每次用戶要得時候直接給成品,這樣子不就快多了嗎?
Controller緩存
這個緩存是讓該控制器下麵所有方法都緩存的(我測試了一下不僅僅頁面可以緩存,貌似方法也可以緩存)
控制器代碼如下:
頁面代碼如下:
從上面可以看出,Index頁面會顯示一個時間,且用ajax請求的方式在控制台輸出了Mess方法請求的時間。
下麵是運行效果:
只要是在10秒之內的刷新、瀏覽,這個時間都是不會變的(不過這個頁面從生成到ajax請求結束居然花了2S。。。)
關於資料庫依賴
在開頭說道A頁面有一個數據要訪問資料庫,這個時候緩存就不僅僅是依賴刷新時間了,而是依賴資料庫是否有更新。
先按照上述節點補充,然後在VS的命令行中運行
aspnet_regsql -S localhost -U sa -P 123456 -ed -d wcfDemo -et -t user
期中
-S localhost:資料庫地址
-U sa:資料庫登錄名
-P 123456:資料庫登錄密碼
-d wcfDemo:資料庫的名稱
-t user:表名稱(小寫)
這樣子每當資料庫有刷新,頁面的緩存就會失效,重新保存了~
原文鏈接:http://www.cnblogs.com/iamlilinfeng/p/4419362.html
另外補充不需要啟動的方式
//啟用更改通知
SqlCacheDependencyAdmin.EnableNotifications(System.Configuration.ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);
//連接到 SQL Server 資料庫併為 SqlCacheDependency 更改通知準備資料庫表
SqlCacheDependencyAdmin.EnableTableForNotifications(System.Configuration.ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString, "QJInfo_SiteInfo");
//制定緩存策略
SqlCacheDependency scd = new SqlCacheDependency("SiteInfoSqlDependency", "QJInfo_SiteInfo");
//插入緩存
cache.Insert("SiteInfo", siteInfo, scd, DateTime.Now.AddHours(5), Cache.NoSlidingExpiration);
之後資料庫表有插入、更新或刪除操作時,該緩存就會自動失效,資料庫裡邊多了個表AspNet_SqlCacheTablesForChangeNotification來記錄相關表變化信息。