哪位知道web緩存技術有哪些?
提問者:露易絲616 | 瀏覽 次 | 提問時間:2016-11-27 | 回答數量:3
一.OutputCaching由於IIS的一些特性,默認情況下OutputCache是打開的,但是要對某些請求進行緩存,還需要開發者進行定製,而且默認情況下,Output Cach...
已有3條答案
youzhiqiang123
回答數:53565 | 被采納數:4
2016-11-27 13:42:40
一.OutputCaching
由於IIS的一些特性,默認情況下OutputCache是打開的,但是要對某些請求進行緩存,還需要開發者進行定製,而且默認情況下,Output Cache會被緩存到硬盤上,我們可以通過修改DiskCacheable的屬性來設置其是否緩存,還可以通過Web config裏配置緩存文件的大小。
<% OutputCacheDuration="3600"VaryByParam="state"DiskCacheable="true"%>
一般用硬盤緩存是考慮到頁麵送顯的數據比較大,相對內存緩存來說,它的容量大,但是訪問速度慢點,如果把周期設太短,使用硬盤緩存的效率就不大好。對於Output Cache的定製,有兩種方法,一種是基於底層的API技術,一種是基於高層的 OutputCaching:
1.基於高層的 OutputCaching
A.由參數改變緩存內容:有些時候我們需要根據用戶的請求來生成頁麵,但是用戶的請求隻有有限的幾種組合,這個時候就可以根據用戶請求來生成幾種緩存頁麵,來進行緩存。
<% OutputCache Duration="60"VaryByParam="state"%>
<asp:SqlDataSourceID="SqlDataSource1"runat="server">
<SelectParameters>
<asp:QueryStringParameter Name="state"QueryStringField="state"DefaultValue="CA"/>
</SelectParameters>
</asp:SqlDataSource>
B.回調緩存:可以針對每個請求在頁麵中插入動態的部分,以彌補單獨使用靜態緩存的不足:
動態的部分用Substitution控件,Substitution控件是一個容器
<asp:SubstitutionID="Substitution1"runat="server"MethodName=""/>
MethodName裏麵放入要調用的方法內容。
2.使用API定製緩存:
通過設置System.Web.HttpCachePolicy屬性來進行配置
<% OutputCache Duration="60"VaryByParam="none"%>
就可以寫成
Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
Response.Cache.SetCacheability(HttpCacheability.Public);
二.FragmentCaching
作為Output的緩存的附加功能,還提供一種緩存技術,專門用於緩存用戶控件。在用戶控件中設置:
<% OutputCache Duration="60"VaryByParam="none"%>
但在引用用戶控件的頁麵不設置緩存。這樣的話,頁麵中除了用戶控件是靜態的,其他都是動態的。
緩存用戶空間同樣還可以使用控件作為參數來源。通過指定控件作為緩存控件的數據來源,可以達到緩存控件數據的目的,和上麵一樣。
三.DataCaching
Asp提供了一種非常快捷的方法進行數據庫緩存,用戶可以非常簡單方便的對頁麵變量進行緩存。並以此提高程序效率。一個頁麵變量的緩存生命周期與應用程序的緩存生命周期相同
實現是把數據放在Cache中,如:
source=new DataView(ds);
Cache("MyCache")=source;
MyCache這個變量其實就是一個XML文件。
四.SQL Caching
通過配置數據庫連接池,隻有當數據庫數據被改變的時候,緩存才會改變。
開個DOS窗口:
C:\\>dir aspnet_regsql.exe/s——這個文件是專門注冊SQL連接池的,它對SQLSever 7.0以上都有專門的支持,我們通過寫一些專門的語句來配置這個注冊連接池,可以把連接池和本地的應用程序(Asp服務器,即IIS)做一個連接。連接池隻能監視有限的幾個庫,不然連接池的負載太大。使用SQL Caching:
先注冊,如:aspnet_regsql.exe-S".\\SQLExpress"-E-d"pubs"-ed
aspnet_regsql.exe-S".\\SQLExpress"-E-d"pubs"-et-t"authors"
其中:-S".\\SQLExpress"表示要使用的SQL Server實例為".\\SQLExpress"。-E表示使用當前windows憑證進行身份驗證。-d"pubs"表示用於應用程序服務的數據庫名稱叫"pubs"。-ed表示為SQL緩存依賴項啟用數據庫。-et表示為SQL緩存依賴項啟用表。-t"authors"表的名稱為"authors"。
然後頁麵上:
<% OutputCacheDuration="99999999"VaryByParam="none"SqlDependency="Pubs.Authors"%>
就OK了。
Web內容可以緩存在客戶端、代理服務器以及服務器端。研究表明,緩存技術可以顯著地提高WWW性能,它可以帶來以下好處:
(1)減少網絡流量,從而減輕擁塞。
(2)降低客戶訪問延遲,其主要原因有:①緩存在代理服務器中的內容,客戶可以直接從代理獲取而不是從遠程服務器獲取,從而減小了傳輸延遲②沒有被緩存的內容由於網絡擁塞及服務器負載的減輕而可以較快地被客戶獲取。
(3)由於客戶的部分請求內容可以從代理處獲取,從而減輕了遠程服務器負載。
(4)如果由於遠程服務器故障或者網絡故障造成遠程服務器無法響應客戶的請求,客戶可以從代理中獲取緩存的內容副本,使得WWW服務的魯棒性得到了加強。
分為數據庫端緩存,應用層緩存,前段緩存,以及客戶端緩存,緩存就是用來避免頻繁的到主存儲器(一般來說可能是數據庫,結構化的磁盤文件,遠程網絡接口,程序接口等等提供數據返回的)獲取數據而建立的一個存取更快的臨時存儲器(緩存)
希望我的回答能夠幫到你。