處理大型門戶網站 一般都需要 使用緩存技術這個web加速器
在 PHP 和 java 一般 使用的是 基于squid 來做.
當然在 windows .NET 平臺也是可以的 squid有 windows版本.
這個以后再去研究,現在 就介紹一下 .NET 自帶的 緩存策略.Microsoft的petshop就用到了它;
一、基于數據庫觸發(設置緩存依賴策略,當數據庫中數據發生變化時,觸發緩存失效;但微軟提供的解決方案目前僅支持SQL Server,如果是ORACLE需要自己實現觸發接口)。
二、基于文件依賴的策略(可以設置緩存依賴于文件中的具體鍵值,當數據更新時,更新文件鍵值迫使緩存失效)。
前面兩種 當然 和 頁面緩存不同. 頁面緩存 可能呈現的是已經過期的內容. 而緩存策略輪詢 基本上都是 最新的內容.
下面我們來一步步的實現這個過程吧:
首先 命令 cmd
打開DOS 界面
cd D:\Windows\Microsoft.NET\Framework\v2.0.50727 |
注意:這里是系統安裝路徑.
然后? 這里我們給數據庫fjmr_db設置緩存策略依賴.
aspnet_regsql -C "Data Source=.\SQLSERVER05;Integrated Security=True;Initial Catalog=fjmr_DB" -ed |
然后 這里我們對表N_News注入依賴(當表N_News有增刪改操作 就緩存失效)
aspnet_regsql -C "Data Source=localhost;Integrated Security=True;Initial Catalog=fjmr_DB" -et -t N_News |
? 然后 在web.config下 配置 緩存策略節點
2 <!-- 設置數據庫 緩存依賴策略 輪詢時間 ms 是否啟用-->
3 <sqlCacheDependency pollTime="5000" enabled="true">
4 <databases>
5 <!--數據庫名稱, 數據庫鏈接, 輪詢時間 ms-->
6 <add name="fjmr_db" connectionStringName="數據庫鏈接配置" pollTime="5000"/>
7 </databases>
8 </sqlCacheDependency>
9
10 </caching>
配置好輪詢SQL緩存依賴后,就能對頁面輸出緩存使用SQL依賴了。
下面是頁面緩存失效時間 9999秒! ,也就是說數據庫沒有更新的話9999秒都不會讀庫.
當然如果數據庫N_News如果更新了.那么頁面就馬上會刷新了!
2 ?<%@ OutputCache Duration="9999" VaryByParam="none"
3 SqlDependency="fjmr_db:N_News" %>
如果希望讓一個頁面依賴多個數據庫表,則需要將sqlDependecy特性設置為一組用分號分隔的數據庫和數據庫表名的列表。
如 :fjmr_db:N_News;fjmr_db:其他表
也可以在一個用戶控件中使用<%@ OutputCache %> 指令來使用輪詢SQL緩存依賴。
也就是說,可以使用輪詢SQL緩存依賴來實現部分頁面緩存。
要對SqlDataSource和ObjectDataSource控件使用輪詢SQL緩存依賴,只需要設置sqlCache- Dependency屬性。
數據庫名必須與配置在Web配置文件<sqlCacheDependency>元素中的數據庫名相對應!
id="srcNews"
ConnectionString="<%$ ConnectionStrings:News %>"
SelectCommand="SELECT * FROM N_News"
EnableCaching="true"
SqlCacheDependency="fjmr_db:N_News"
OnSelecting="srcNews_Selecting"
Runat="server" />
我們也可以對Cache對象使用輪詢SQL緩存依賴,用SqlCacheDependency對象來代表一個輪詢SQL緩存依賴。
當DataTable添加到Cache時,該類就用作Cache.Insert()的一個參數。
如果需要創建多個數據庫表的依賴,
則需要創建多個SqlCacheDependency對象并用Aggregate- CacheDependency類的實例表示多個依賴。
2 ?if (news == null)
3 {
4 news = GetNewsFromDB();
5 SqlCacheDependency sqlDepend = new
6 SqlCacheDependency("MyDatabase", "_News");
7 Cache.Insert("_News", news, sqlDepend);
8 }
9 grdNews.DataSource = news;
10 grdNews.DataBind();
11 }
最后 這種緩存策略只適用于一般 中小型的 緩存加速. 如果對大型系統 做的話 很多時候是用到了 NoSQL技術,分布式緩存服務器.