其實任何資料裡面的任何知識點都無所謂,都是不重要的,重要的是學習方法,自行摸索的過程(不妥之處歡迎指正)
匯總:http://www.cnblogs.com/dunitian/p/4822808.html#mvc
本章Demo:https://github.com/dunitian/LoTCodeBase/blob/master/NetCode/6.網頁基礎/BMVC5/MVC5Base/Controllers/CacheController.cs
這次來篇放松的,咱們不要老是說安全相關的東西。緩存這東西並不是MVC獨有的,N年前就有了,簡單介紹一下平時項目裡面使用的(Redis,Memcache等下次說)
1.頁面緩存:
先說最常見的的一種:[OutputCache(Duration = 100)] ,Duration單位是秒
第一次回到了斷點的地方,100秒內任意刷新都不會再執行控制器裡面的A()了
帶參數緩存
[OutputCache(Duration = 100, VaryByParam = "id")] [OutputCache(Duration = 100, VaryByParam = "id;name")]
第一次訪問cache/b?id=1的時候斷點停下了,100s內不會進入斷點了。當id=2的時候又重新進入了斷點。多參數類似,注意一下參數分割是;
---------------------------------------------------------------------------------------------------
2.二級緩存:(System.Web;System.Web.Caching;)
2.1絕對過期緩存
HttpRuntime.Cache.Add(key, list, null, DateTime.Now.AddSeconds(60), Cache.NoSlidingExpiration, CacheItemPriority.Default, null);
2.2相對過期緩存(有點Session的感覺了)
HttpRuntime.Cache.Add(key, list, null, Cache.NoAbsoluteExpiration, new TimeSpan(0, 0, 10), CacheItemPriority.Default, null);
2.3數據庫依賴緩存
1.啟動一下數據庫緩存依賴:管理員身份打開VS開發人員命令(參數詳解:https://msdn.microsoft.com/zh-cn/library/ms229862)
aspnet_regsql -C "data source=xxx;initial catalog=xxx;uid=xxx;password=xxx;" -ed -et -t "表名"
沒有裝VS的可以用管理員打開cmd,然後切換到以下目錄:(v4.0.xxx有可能不一樣)
C:\Windows\Microsoft.NET\Framework\v4.0.30319
C:\Windows\Microsoft.NET\Framework64\v4.0.30319
其實可以看到,他的內部實現是通過觸發器來的,所以不見得有多麼高效:
2.配置WebConfig:
<!--數據庫緩存依賴配置 Start--> <caching> <!--pollTime,毫秒為單位,意識是每隔10秒檢測下數據庫,檢測表是否有發生變化--> <sqlCacheDependency pollTime="10000"> <databases> <add name="MySQLCacheDB" connectionStringName="cacheConn"/> </databases> </sqlCacheDependency> </caching> <!--數據庫緩存依賴配置 End-->Code:HttpRuntime.Cache.Add(key, list, new SqlCacheDependency("SQLCacheDB", "SeoTKD"), Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.Default, null);
應用場景一般都是緩存數據庫依賴表裡面的數據,當裡面數據發生改變則緩存失效,這樣就可以及時自動更新緩存了(我這邊只是做個演示)
數據沒有更新之前:
往死裡刷新都沒有更新
表更新之後:
其他:文件(夾)依賴緩存,一般也就一些網站固定配置用它,一般是根據文件最後一次修改時間來判斷時間差
簡單舉個例子:
HttpRuntime.Cache.Add(key, list, new CacheDependency(Request.MapPath("/App_Data/Config.xml")), Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.Default, null);
改變內容:
課外拓展:http://www.cnblogs.com/knowledgesea/p/3904929.html