|
1.頁面緩存: 1.1部分頁面緩存通過只緩存頁面上的一個(gè)特定區(qū)域來解決這個(gè)問題.利用部分頁面緩存,可以對(duì)頁面的不同區(qū)域應(yīng)用 1.2當(dāng)一個(gè)頁面被緩存時(shí),被請(qǐng)求時(shí)的頁面內(nèi)容并不會(huì)每次都重新生成.每次請(qǐng)求一個(gè)頁面,對(duì)應(yīng)到頁面的.NET類也不會(huì) ((((((((((((((((((((((((((((((((((((((((((((((((
1.5使用編程方式設(shè)置輸出緩存過期 HttpResponse.RemoveOutputCacheItem(Page.ResolveUrl("~/實(shí)現(xiàn)使用編程方式設(shè)置頁面輸出緩存過 期/MovieList.aspx")); Response.Redirect("~/實(shí)現(xiàn)使用編程方式設(shè)置頁面輸出緩存過期/MovieList.aspx");![]() 1.6若要?jiǎng)h除多個(gè)頁面,需要?jiǎng)?chuàng)建一個(gè)所謂的鍵依賴(Key dependency)。一個(gè)鍵依賴用于在緩存中的項(xiàng)目之間建立依賴。當(dāng)?shù)诙€(gè)項(xiàng)目移除時(shí),第一個(gè)項(xiàng)目也會(huì)被自動(dòng)移除。
***************************************************************************************** 此方法被定義為靜態(tài)方法(在 Visual Basic 中為共享方法)。 此方法接受 HttpContext 類型的參數(shù)。 此方法返回 String 類型的值。 (注:Substitution的屬性MethodName返回的string可以支持Html編碼哦。)
用戶控件時(shí)間:<%= DateTime.Now.ToString("T") %><hr /> <%@ Control Language="C#" ClassName="SlidingUserCache" %> <%@ OutputCache Duration="10" VaryByParam="none" %> <script runat="server"> void Page_Load()![]() { CachePolicy.SetSlidingExpiration(true); CachePolicy.Duration = TimeSpan.FromMinutes(1); } </script> User Control Time: <%= DateTime.Now.ToString("T") %>![]()
<asp:GridView ID="grdMovies" DataSourceID="srcMovies" runat="server" /> <asp:SqlDataSource ID="srcMovies" EnableCaching="true" CacheDuration="60" SelectCommand="SELECT * FROM Movies" ConnectionString="<%$ ConnectionStrings:Movies %>" runat="server" />
4.2使用Sliding緩存過期策略 <asp:GridView ID="grdMovies" DataSourceID="srcMovies" runat="server" /> <asp:SqlDataSource ID="srcMovies" EnableCaching="true" CacheExpirationPolicy="Sliding" CacheDuration="15" SelectCommand="SELECT * FROM Movies" ConnectionString="<%$ ConnectionStrings:Movies %>" runat="server" OnSelecting="srcMovies_Selecting" />![]() (小技巧:檢測(cè)電影的緩存是否失效可實(shí)現(xiàn)SqlDataSource數(shù)據(jù)源控件的Selecting事件,因此事件是在從數(shù)據(jù)庫獲得電影時(shí)被調(diào)用,若從內(nèi)存中獲得時(shí)不會(huì)被調(diào)用.) 4.3其實(shí)ObjectDataSource控件與SqlDataSource控件一樣的緩存屬性.
5.使用數(shù)據(jù)緩存 5.1使用緩存API
6.使用SQL緩存依賴(就象trigger一樣,數(shù)據(jù)庫一更新就把緩存給更新) 6.1使用拉SQL緩存依賴 拉SQL緩存依賴就是:使用數(shù)據(jù)庫trigger.當(dāng)表被修改時(shí),trigger被觸發(fā),名為AspNet_SqlCacheTablesForChangeNotification的數(shù)據(jù)表的一行數(shù)據(jù)將被更新,來記錄被修改的情況. 具體內(nèi)部運(yùn)行是:ASP.MET Framework使用一個(gè)后臺(tái)線程,來定期拉數(shù)據(jù)庫表的修改信息.如果有修改,則依賴于數(shù)據(jù)表的緩存項(xiàng)目從緩存中移除. 6.2配置拉SQL緩存依賴 6.2.1.2啟用一個(gè)數(shù)據(jù)庫之后,就可以用如下命令啟用特定表的SQL緩存依賴:(啟用tbTest數(shù)據(jù)表的SQL緩存依賴) <caching> <sqlCacheDependency enabled="true" pollTime="1000"> <databases> <add name="MyPubs" connectionStringName="Pubs"/> </databases> </sqlCacheDependency> </caching>
<%@ OutputCache Duration="8888" VaryByParam="none" SqlDependency="MyPubs:authors,title,***" %>![]() <%= DateTime.Now.ToString("T") %><hr /> <asp:GridView ID="grdAuthors" runat="server" DataSourceID="srcAuthors" /> <br /> <asp:SqlDataSource ID="srcAuthors" runat="server" ConnectionString="<%$ ConnectionStrings:Pubs %>" SelectCommand="SELECT au_lname,au_fname,address FROM authors" />![]()
6.4配置推SQL緩存依賴 2).必須配置應(yīng)用程序開始監(jiān)聽通知.
void Application_Start(object sender, EventArgs e)![]() { // 在應(yīng)用程序啟動(dòng)時(shí)運(yùn)行的代碼 string conString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["Test"].ConnectionString; SqlDependency.Start(conString); }![]() //只需要在Web.config中添加個(gè)數(shù)據(jù)庫連接字符串即可
<%@ Page Language="C#" %> <%@ OutputCache Duration="888" VaryByParam="none" SqlDependency="CommandNotification" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www./TR/xhtml1/DTD/xhtml1-transitional.dtd"> ![]() <script runat="server">![]() </script>![]() <html xmlns="http://www./1999/xhtml" > <head runat="server"> <title>Push SQL OutputCache</title> </head> <body> <form id="form1" runat="server"> <div> <%= DateTime.Now.ToString("T") %><hr /> <asp:GridView ID="grdTest" runat="server" DataSourceID="srcTest" /> <br /> <asp:SqlDataSource ID="srcTest" runat="server" ConnectionString="<%$ ConnectionStrings:Test %>" SelectCommand="SELECT id,name FROM dbo.tbTest" /> </div> </form> </body> </html>![]()
SqlCacheDependency 類監(jiān)視輸出緩存所依賴的數(shù)據(jù)庫中的表,因此當(dāng)更新表中的項(xiàng)時(shí),使用基于表的輪詢時(shí)將從緩存中移除這些項(xiàng)。將通知(在 Microsoft SQL Server 2005 中)與 CommandNotification 值一起使用時(shí),最終將使用 SqlDependency 類向 SQL Server 2005 服務(wù)器注冊(cè)查詢通知。 注意
<%@ Page Language="C#" %>![]() <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www./TR/xhtml1/DTD/xhtml1-transitional.dtd">![]() <script runat="server"> protected void srcAuthors_Selecting(object sender, SqlDataSourceSelectingEventArgs e)![]() { this.lblMsg.Text = "正在從數(shù)據(jù)庫中查詢數(shù)據(jù)"; } </script>![]() <html xmlns="http://www./1999/xhtml" > <head runat="server"> <title>無標(biāo)題頁</title> </head> <body> <form id="form1" runat="server"> <div> <asp:Label ID="lblMsg" runat="server" /> <hr /> <asp:GridView ID="grdTest" runat="server" DataSourceID="srcTest" /> <asp:SqlDataSource ID="srcTest" runat="server" ConnectionString="<%$ ConnectionStrings:Test %>" SelectCommand="SELECT id,name FROM dbo.tbTest" EnableCaching="true" SqlCacheDependency="CommandNotification" OnSelecting="srcAuthors_Selecting" /> </div> </form> </body> </html>![]() 6.4.2.3對(duì)數(shù)據(jù)緩存使用推SQL緩存依賴(實(shí)例:)
<%@ Page Language="C#" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.SqlClient" %> <%@ Import Namespace="System.Web.Configuration" %>![]() <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www./TR/xhtml1/DTD/xhtml1-transitional.dtd">![]() <script runat="server"> void Page_Load()![]() { DataTable dtTest = (DataTable)Cache["dtTest"]; if (dtTest==null)![]() { Trace.Warn("正在數(shù)據(jù)庫中獲取數(shù)據(jù)"); string conString = WebConfigurationManager.ConnectionStrings["Test"].ConnectionString; SqlDataAdapter da = new SqlDataAdapter("SELECT id,name FROM tbTest", conString); //進(jìn)行推SQL緩存依賴設(shè)置 SqlCacheDependency sqlDepend = new SqlCacheDependency(da.SelectCommand); //要注意是Fill之前就綁定了緩存依賴 da.Fill(dtTest); Cache.Insert("dtTest", dtTest, sqlDepend); } grdTest.DataSource = dtTest; grdTest.DataBind(); } </script>![]() <html xmlns="http://www./1999/xhtml" > <head runat="server"> <title>無標(biāo)題頁</title> </head> <body> <form id="form1" runat="server"> <div> <asp:Label ID="lblMsg" runat="server" /> <asp:GridView ID="grdTest" runat="server" /> </div> </form> </body> </html>![]() |
|
|