Posted on 2007-06-08 14:58
城市劣人 閱讀(1804)
評論(1) 編輯 收藏
已經(jīng)轉(zhuǎn)移到 好·色之徒--我的博客、我的生活
緩存(CACHE)
定義:在本地放置、隱藏或存儲常用信息以供快速檢索
A memory area where frequently accessed data can be stored for rapid access.
好處:提高系統(tǒng)響應速度、改善系統(tǒng)運行性能的技術。
面臨的問題
1、被處理的內(nèi)容短時間不變,所以短時間內(nèi)可以作為靜態(tài)內(nèi)容進行處理
2、在一個不太長的時間內(nèi),被處理的內(nèi)容可能或者必定產(chǎn)生變化,所以必須將他們作為動態(tài)內(nèi)容進行處理
3、在合理的時間區(qū)段內(nèi)可以忽略被處理內(nèi)容變化后帶來的影響
4、對這些內(nèi)容的處理動作比較消耗系統(tǒng)性能,影響系統(tǒng)響應時間?基礎數(shù)據(jù)的變更問題
例子:系統(tǒng)中需要處理的基礎數(shù)據(jù);統(tǒng)計報表。
解決方法
1、緩存信息
當上述的基礎數(shù)據(jù)或者統(tǒng)計報表第一次被訪問時,被處理的內(nèi)容被當作動態(tài)信息,基礎數(shù)庫從數(shù)據(jù)庫中獲得,統(tǒng)計報表也會被生成符合要求的圖形、文件,然后這些信息都會被放入緩存信息中
2、響應信息由緩存提供
當上述的基礎數(shù)據(jù)或者統(tǒng)計報表繼續(xù)被訪問時,系統(tǒng)將會首先檢查緩存信息中是否有對應的內(nèi)容和我們設定的緩存規(guī)則,如果符合緩存信息存在而且符合緩存規(guī)則,給出的響應將來自于緩存信息,如果沒有或者緩存信息已經(jīng)不符合設定的要求,系統(tǒng)將重復上一步的動作。
在步驟2中,多數(shù)情況下,當用戶請求到達時,被處理的內(nèi)容將來自于緩存,所以大大的減少了與數(shù)據(jù)庫的交互,或者不再需要為每個請求都生成一次報表圖形或者文件,這部分工作的減少對于降低系統(tǒng)性能消耗、提高系統(tǒng)穩(wěn)定性和并發(fā)處理能力是非常有益的
OSCACHE
OSCache是OpenSymphony組織提供的一個J2EE架構(gòu)中Web應用層的緩存技術實現(xiàn)組件
特點
兼容多種支持JSP的web服務器:已經(jīng)通過兼容測試的web服務器包括OrionServer?、Macromedia?JRun?、BEA?Weblogic?、IBM?Websphere?、Silverstream?、Caucho?Resin?、Tomcat?(4.x及以上版本)?
可選的緩存區(qū):你可以使用內(nèi)存、硬盤空間、同時使用內(nèi)存和硬盤或者提供自己的其他資源(需要自己提供適配器)作為緩存區(qū)。
使用內(nèi)存作為緩存區(qū)將可以提供更好的性能?
使用硬盤作為緩存區(qū)可以在服務器重起后迅速恢復緩存內(nèi)容?
同時使用內(nèi)存和硬盤作為緩存區(qū)則可以減少對內(nèi)存的占用?
OSCache中按照緩存范圍的不同分為兩種不同的方式:一種是緩存JSP頁面中部分或者全部內(nèi)容,一種是基于整個頁面文件的緩存
另外OSCHACHE還支持:POJO 緩存 、O/R Data Access 緩存 。
JSP部分內(nèi)容緩存
第一次請求到達時,標簽中的內(nèi)容被處理并且緩存起來,當下一個請求到達時,緩存系統(tǒng)會檢查這部分內(nèi)容的緩存是否已經(jīng)失效,主要是以下幾項:
1.?緩存時間超過了cache標簽設置的time或者duration屬性規(guī)定的超時時間?
2.?cron屬性規(guī)定的時間比緩存信息的開始時間更晚?
3.?標簽中緩存的內(nèi)容在緩存后又被重新刷新過?
4.?其他緩存超期設定?
JSP部分內(nèi)容緩存-一個例子
/*因為OSCache使用key值來標識緩存內(nèi)容,使用相同的key值將會被認為使用相同的的緩存內(nèi)容,所以使用動態(tài)的key值可以自由的根據(jù)不同的角色、不同的要求決定使用不同的緩存內(nèi)容 */
<cache:cache?key="<%=?product.getId()?%>"?time="1800"?refresh="<%=?needRefresh?%>">
?/* JSP代碼內(nèi)容 或jsp tag*/
?<% 代碼%>
</cache:cache>
CashFilter實現(xiàn)頁面級緩存
1、在OSCache組件中提供了一個CacheFilter用于實現(xiàn)頁面級的緩存,主要用于對web應用中的某些動態(tài)頁面進行緩存,尤其是那些需要生成pdf格式文件/報表、圖片文件等的頁面,不僅減少了數(shù)據(jù)庫的交互、減少數(shù)據(jù)庫服務器的壓力,而且對于減少web服務器的性能消耗有很顯著的效果。
2、這種功能的實現(xiàn)是通過在web.xml中進行配置來決定緩存哪一個或者一組頁面,而且還可以設置緩存的相關屬性,這種基于配置文件的實現(xiàn)方式對于J2EE來說應該是一種標準的實現(xiàn)方式了
3、
<filter>
<filter-name>CacheFilter</filter-name>
<filter-class>com.opensymphony.oscache.web.filter.CacheFilter</filter-class>
<init-param>
<param-name>time</param-name>
<param-value>60</param-value></init-param>
<init-param>
<param-name>scope</param-name>
<param-value>session</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CacheFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>