.NET緩存


l如果每次進入頁面的時候都查詢數據庫生成頁面內容的話,如果訪問量非常大,則網站性能會非常差。而如果只有第一次訪問的時候才查詢數據庫生成頁面內容,以后都直接輸出內容,則能提高系統性能。這樣無論有多少人訪問都只訪問一次數據庫,數據庫壓力不變。

l緩存(Cache)是一種用空間換取時間的技術,存在於計算機中很多地方,用來將一些慢速設備中的常用數據保存在快速設備中,取數據的時候直接從快速設備中取。比如CPU二級緩存、內存、windows文件讀取緩存。

l緩存存在失效的問題:為了保證從緩存中讀取數據和慢速數據(數據庫)中數據一致,則需要在慢速數據(數據庫)中對應的數據發生變化的時候,清除緩存中相應的數據。

l緩存是改進網站性能的第一個手段,就像索引是改進數據庫性能的第一個手段一樣。ASP.net緩存主要分為:頁面緩存(中庸)、數據源緩存(最不靈活的)、數據緩存(靈活)這三種主要類型。

 

頁面緩存:

l給頁面添加<%@ OutputCache Duration=“15” VaryByParam=“none”%>標簽就可以啟用頁面緩存,這樣整個頁面的內容都會被緩存,頁面中的ASP.Net代碼、數據源在緩存期間都不會被運行,而是直接輸出緩存的頁面內容。 Duration表示緩存時間,以秒為單位,超過這個時間則緩存失效,再次生成以后會再緩存15秒,以此類推。在Page_Load處設置斷點、修改數據庫數據測試。這個緩存是在服務器緩存的,不是在客戶端,因為用HttpWatch還是能看到向服務器提交的請求的,只不過服務器看到有緩存就沒有再執行頁面類。一般只有看帖、看新聞、看視頻的頁面才緩存,CUD的頁面沒必要緩存。

l緩存是針對所有這個頁面的訪問者。這樣1個訪問者和1萬個訪問者、一次訪問和100萬次訪問對數據庫的壓力是一樣的。

l對於看新聞頁面來講,如果如上設置的話,則會緩存在第一個看到的新聞,因為?id=2、?id=3只是頁面的不同參數而已,為了能讓不同的新聞各自緩存,因此可以設置VaryByParam=“id”,表示對於相同頁面的不同的id參數進行單獨緩存。如果有多個確定緩存的參數,則將參數名用分號隔開即可,比如VaryByParam=“id;number”。測試。緩存可能會有過期數據的問題,因此根據需求選用。

l如果想讓任何不同的查詢字符串都創建不同的緩存,則設置VaryByParam="*",一般情況下設置“*”就足夠。

l在WebUserControl中也可以像頁面緩存一樣設置控件的緩存。

 

數據源緩存:

l設定ObjectDataSource的CacheDuration(緩存時間:秒),EnableCaching=true。這樣每隔CacheDuration指定的時間段才調用SelectMethod指定的方法來執行數據庫查詢,其他時候都是直接返回緩存的數據。取數據的過程緩存,在緩存期間,綁定控件向ObjectDataSource要數據, ObjectDataSource直接將緩存的數據返回給控件,不再去向TypeName指向的類要數據。

 

緩存依賴:

依賴於文件內容
CacheDependency cDep = new CacheDependency(filePath);

System.Web.Caching.CacheDependency cDep = new System.Web.Caching.CacheDependency(filePath);

Cache.Add("fmsg", msg, cDep, System.Web.Caching.Cache.NoAbsoluteExpiration, System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.Normal, RemovedCallback);

依賴於數據庫內容(輪詢機制/通知機制)
一:輪詢機制 –fw主動到數據庫檢查數據是否改變
1.使用C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727中的aspnet_regsql.exe:
注冊:aspnet_regsql -S . -E -ed -d 數據庫名 -et -t 表名
刪除:aspnet_regsql -S . -E -d 數據庫名 -dt -t 表名
取消數據庫緩存依賴: aspnet_regsql -S . -E -dd 數據庫名
數據庫名 列出已注冊表:aspnet_regsql -S . -E -d 數據庫名 -lt
2.配置web.config

3.數據庫依賴對象
SqlCacheDependency cDep =
new SqlCacheDependency("GSSMS", "Students");

 

1.aspnet_regsql -S . -E(集成登陸)/-U sa -P 123 -ed(啟動/-dd關閉) -d(數據庫名) GSSMS -et(指定緩存依賴的表名/-dt禁用表名) -t(表名) Aticle
2.依賴於數據庫的web.config配置
<system.web>

<caching>

<sqlCacheDependency enabled="true">

<databases>

<add name="GSSMS" connectionStringName="conStr2" pollTime="15000"/>

</databases>

</sqlCacheDependency>

</caching>

 

 

參考文章:http://www.cnblogs.com/Ring1981/archive/2007/04/10/680893.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM