同桌上课用手指进去了好爽_欧美丰满熟妇xxⅹⅹ性大i_成人av天天日天天拍拍_猛男gay帅男gay男男同志_欧美va天堂在线观看_人妻无码av中文系列三里桃花_亚欧免费无码在线观看_久久久精品国产亚洲av水_日韩在线免费看污污污_2021无码专区人妻系列日韩

首頁 優(yōu)化推廣 Asp.net緩存簡(jiǎn)介

Asp.net緩存簡(jiǎn)介

來源: | 時(shí)間:2011/3/29 10:14:18 |

概述

     緩存學(xué)術(shù)一些的解釋是”將常用數(shù)據(jù)放入易于讀取的地方以提高性能”。而對(duì)于Asp.net來說,需要被緩存的對(duì)象多種多樣,包括從數(shù)據(jù)庫中提取出來的數(shù)據(jù),以及aspx頁面生成的靜態(tài)頁,甚至是編譯好的程序集。合理利用緩存能讓Asp.net的性能大幅提升,下面將對(duì)Asp.net中的緩存機(jī)制進(jìn)行簡(jiǎn)單概述。

 

緩存的分類

 

   在Asp.net中,大部分緩存機(jī)制是保存在cache對(duì)象中,也就是服務(wù)器內(nèi)存的一部分。當(dāng)用戶請(qǐng)求數(shù)據(jù)時(shí),如果數(shù)據(jù)已經(jīng)被緩存,則用戶所提取的數(shù)據(jù)直接從服務(wù)端返回,而不是從數(shù)據(jù)庫等底層數(shù)據(jù)庫提取。這對(duì)性能的提升不得不說很有幫助。下面來看asp.net中幾種緩存機(jī)制。

 

程序集緩存

 

    簡(jiǎn)單的說,這種緩存是asp.net自帶的,無需開發(fā)人員進(jìn)行參與的緩存方式。即當(dāng)?shù)谝淮握?qǐng)求服務(wù)器時(shí),Page類以及相關(guān)程序集被編譯,當(dāng)下次請(qǐng)求時(shí),訪問緩存后的編譯而不是重新編譯。CLR會(huì)自動(dòng)檢測(cè)代碼的改變,如果代碼改變后,當(dāng)下次訪問時(shí),相關(guān)代碼會(huì)被重新編譯。

 

數(shù)據(jù)源緩存

 

   數(shù)據(jù)源緩存,顧名思義,也就是利用數(shù)據(jù)源控件對(duì)獲取的數(shù)據(jù)進(jìn)行緩存的方式。這些控件包括SqlDataSource,ObjectDataSource等:

  

     作為抽象類的DataSourceControl暴漏了如下屬性用于緩存:

 

 

名稱 說明
CacheDuration 獲取或設(shè)置以秒為單位的一段時(shí)間,數(shù)據(jù)源控件就在這段時(shí)間內(nèi)緩存 SelectMethod 屬性檢索到的數(shù)據(jù)。
CacheExpirationPolicy 獲取或設(shè)置緩存的到期行為,該行為與持續(xù)時(shí)間組合在一起可以描述數(shù)據(jù)源控件所用緩存的行為。
CacheKeyDependency 獲取或設(shè)置一個(gè)用戶定義的鍵依賴項(xiàng),該鍵依賴項(xiàng)鏈接到數(shù)據(jù)源控件創(chuàng)建的所有數(shù)據(jù)緩存對(duì)象。
EnableCaching 獲取或設(shè)置一個(gè)值,該值指示 ObjectDataSource 控件是否啟用數(shù)據(jù)緩存。

 

   

       而使用起來就非常簡(jiǎn)單了,只需要將緩存的相關(guān)屬性進(jìn)行設(shè)置即可。比如我想要當(dāng)前數(shù)據(jù)源緩存10秒,只需要設(shè)置EnableCaching屬性和CacheDuration屬性如下:

 

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
            ConnectionString="<%$ ConnectionStrings:AdventureWorksConnectionString %>" 
            SelectCommand="SELECT top 10 * FROM [Person].[Contact]" EnableCaching="true" CacheDuration="10"></asp:SqlDataSource>

 

這種方式的工作原理可以用下圖表示:

 

 

關(guān)于ObjectDataSource我推薦閱讀Caching Data with the ObjectDataSource

 

SQL Cache Dependency

 

     大家應(yīng)該注意到了上面的數(shù)據(jù)源控件還暴漏了CacheKeyDependency屬性,這是用于實(shí)現(xiàn)SQL Cache Dependency的方式,關(guān)于Dependency,其實(shí)就是在數(shù)據(jù)庫表內(nèi)容改變時(shí),將相應(yīng)的緩存進(jìn)行更新,正如Dependency這個(gè)詞的意思一樣,是緩存依賴底層數(shù)據(jù)庫。下面就要說到兩種實(shí)現(xiàn)SQL Cache Dependency的方法了。

方法一:使用輪流查詢機(jī)制(polling-based):

     這種方式實(shí)現(xiàn)機(jī)制是在sql server中插入以AspNet_SqlCacheNotification_Trigger開頭的一個(gè)特殊的表和5個(gè)存儲(chǔ)過程,當(dāng)被監(jiān)測(cè)的表數(shù)據(jù)發(fā)生改變時(shí),則一個(gè)名為AspNet_SqlCacheTablesForChangeNotification的表被更新,而Asp.net程序會(huì)根據(jù)用戶設(shè)置的間隔時(shí)間每隔一定時(shí)間檢查一下數(shù)據(jù)庫內(nèi)容是否更新,如果更新,則將緩存中的數(shù)據(jù)進(jìn)行跟新。

      這種機(jī)制配置相對(duì)比較麻煩。具體做法網(wǎng)上有很多教程,這里我推薦閱讀:Using SQL Cache Dependencies.

      使用起來就很簡(jiǎn)單了,可以在頁面頭部的OutputCache指令中設(shè)置,會(huì)社DataSource空間中進(jìn)行設(shè)置,設(shè)置格式為:“數(shù)據(jù)庫名:表名”.里面的表名即是需要監(jiān)測(cè)是否改變的表名,示例如下:

<%@ OutputCache Duration="30" VaryByParam="none" SqlDependency="DatabaseName:tableName" %> 

    如果需要添加多個(gè)表,則用”;”進(jìn)行分割

SqlDependency="database:table;database:table"

 

 

 

方法二:使用通知機(jī)制(notification-based)

 

      使用通知機(jī)制配置起來要簡(jiǎn)便很多,但是sql server的版本需要9.0以上,也就是sql server 2005,使用這種方式需要將sql server的通知服務(wù)開啟。

      使用通知機(jī)制可以對(duì)頁面進(jìn)行緩存,也可以對(duì)datasouce控件進(jìn)行緩存,對(duì)頁面進(jìn)行緩存代碼如下:

<%@ OutputCache Duration="30" VaryByParam="none" SqlDependency="CommandNotification" %>

   注意SqlDependency必須設(shè)置成CommandNotification。

   對(duì)于datasource控件,也是同樣:

服務(wù)熱線

153 8323 9821

功能和特性

價(jià)格和優(yōu)惠

網(wǎng)站和維護(hù)

推廣和優(yōu)化

微信服務(wù)號(hào)