軟體專案實訓及課程設計指導——如何應用OSCache快取框架提高Web頁面響應效能
1、快取應用技術是提高軟體應用系統性能的最簡單和最有效的方式之一
在計算機的軟硬體系統中大量地應用快取(Cache)技術,所謂"快取"是指位於"目標"(可以為軟體類的應用系統,也可以為硬體裝置或者部件)和"源"( 一般為資料來源)之間,其目的是為了匹配"目標"和"源"之間由於資料傳輸速度的差異,或者為了減少"目標"對物理資料來源頻繁訪問的次數等應用要求,從而提高"目標"所屬的軟硬體系統的執行效能。
比如,大家經常使用的Web瀏覽器中就應用了快取技術,Web瀏覽器透過應用快取可以縮短Web網頁請求資源的頻次(比如對當前Web頁面的重複重新整理),減少延遲。並且由於儲存在快取(快取的介質一般是記憶體)中的檔案可以重複使用,因此Web瀏覽器,透過應用快取還可以減少網路頻寬,從而降低網路負荷。
在Java應用程式開發實現和J2EE Web應用系統的設計和開發實現中,軟體應用系統的設計和開發實現人員可以在系統的表示層和系統的持久層中充分地應用快取機制和相應實現技術能夠大大地提高Web應用系統的訪問效能。
比如資料庫連線池、多執行緒應用中的執行緒池、物件複用池以及各種應用框架中的快取外掛,如Hibernate框架中常使用的二級快取外掛EHCache,分散式應用環境中的快取記憶體系統MemCache,基於key-value(鍵/值對)遠端字典服務的Redis以彌補MemCache等系統在key-value形式的儲存應用中的不足。
當然,在應用快取機制時一定要將軟體應用系統中不經常改動但又需要頻繁訪問的資料加以快取。比如在Web應用系統開發中,可以將BBS論壇系統中的分類資訊、新聞系統中的新聞資訊、網上商城中的商品資訊等進行快取。作者在下文中為讀者介紹如何應用開源的OSCache快取框架以提高J2EE Web應用系統的響應效能。
2、應用開源的OSCache快取框架以提高Web應用系統的響應效能
但由於OpenSymphony的官方網站已經在2010年11月份就已經關閉了,讀者如果現在專案開發中還需要應用OSCache快取框架,可以透過國內的系統平臺進行下載。可能是由於OSCache快取框架當時很流行的原因吧,國內許多系統平臺都提供了OSCache快取框架的系統庫檔案供開發人員下載。作者在下文中給讀者推薦一個國內下載平臺,參看如下示例圖所示。
儘管OSCache快取框架也可以快取普通的Java類物件,但開發人員一般都將它應用於J2EE Web表示層中實現Web頁面內容的快取。因此,在J2EE Web應用系統專案的表示層開發中透過應用OSCache快取框架,開發人員不但可以實現通常的快取功能,還能夠改善J2EE Web應用系統的穩定性和減輕對Web伺服器的負擔、並減少對資料庫表中的資料IO訪問的效能開銷。
3、開源OSCache快取框架的主要技術特性
(1)能夠相容多種不同形式的J2EE Servlet容器
開源OSCache快取框架目前能夠支援各種主流的商業和開源的J2EE Servlet容器——包括BEA Weblogic(現在改為Oracle Weblogic)、IBM Websphere 和Tomcat等,其它支援J2EE Servlet2.3、JSP1.2版本的Web伺服器應該都是完全相容OSCache快取框架系統的。
(2)可選的快取區定義配置
Web應用系統的開發人員在具體應用OSCache快取框架時,可以使用記憶體、硬碟空間或者同時使用記憶體和硬碟實現快取。但使用記憶體作為快取區將可以提供更好的效能、速度更快,而使用硬碟作為快取區可以在Web伺服器重啟動後迅速恢復所快取的資料內容;當然也允許Web應用系統的開發人員提供自己的其它資源(但需要自己提供介面卡)作為快取區。
(3)靈活的快取系統的實現並提供不同形式和級別的快取實現
OSCache快取框架不僅可以實現Web頁面級(整個Web頁面)的響應內容快取,也可以對Web頁面中的部分內容進行快取,這完全由開發者在具體應用時根據待開發的應用專案不同的需求、不同的環境選擇不同的快取級別;而快取的內容可以為任何物件,比如可以快取Web頁面或HTTP請求、Java類的物件例項等。
(4)還提供功能豐富的系統類庫API
OSCache快取框架透過提供豐富的系統類庫API,從而允許Web應用系統的開發人員透過程式設計的方式來控制和管理OSCache快取框架的功能實現。透過應用OSCache快取框架,能夠提高應用系統的容錯能力——因為在一般的Web應用系統中,Web頁面中的動態資料基本上都來自於後臺的資料庫表。而如果某次請求響應時的資料庫訪問中出現了錯誤,那麼使用者將看到系統所提示的各種錯誤資訊。
但如果此時Web應用系統的表示層元件中應用了OSCache快取框架技術實現了Web頁面快取,那麼OSCache快取框架就可以使用快取中的Web頁面內容作為響應輸出,從而減少了產生錯誤資訊的次數,相應地也就提高了應用系統的容錯能力。
4、在Web專案中新增OSCache快取框架的系統包檔案
OSCache快取框架相關的系統庫檔案主要為oscache-2.3.2.jar和commons-logging.jar兩個檔案,而對於Apache 提供的日誌處理系統commons-logging.jar檔案如果在專案中已經在前面加入過,則在此可以不再需要重複新增。操作過程的示例圖如下所示。
oscache-2.3.2.jar系統庫檔案新增完畢後的最後結果狀態,可以參考如下示例圖所示。
5、將oscache.properties、oscache.tld檔案放入WEB-INF\class目錄中
在OSCache快取框架所提供的系統包包含有oscache.properties、oscache.tld這兩個示例檔案,其中的oscache.properties檔案主要提供對OSCache快取框架的快取策略定義,開發人員可以根據專案的快取需要修改其中相關的配置專案從而可以改變快取策略以滿足專案的特殊需要;而oscache.tld檔案則為OSCache快取框架的標籤庫定義檔案,開發人員不需要修改,只需要簡單地複製到自己的Web專案中。
因此,開發人員需要將這兩個檔案匯入到Web專案中的WEB-INF\class目錄中。操作過程的示例圖如下所示。
oscache.properties、oscache.tld這兩個示例檔案匯入完畢後的最後結果狀態,可以參考如下示例圖所示。
6、在Web專案中增加對OSCache快取框架所提供的標籤庫的支援
根據J2EE JSP技術規範要求,如果在Web頁面中需要應用第三方的標籤庫(taglib),需要在Web應用專案中的web.xml部署描述檔案內新增相關的配置專案以實現對標籤庫(taglib)的技術支援。
因此,需要修改Web應用專案中的web.xml檔案以填加下面的配置專案內容,增加對OSCache快取框架提供的標籤庫(taglib)的技術支援。
(1)對於JSP1.2版技術規範的Web應用系統的配置定義結果參看下面的狀態
<taglib> <taglib-uri>oscache</taglib-uri> <taglib-location>/WEB-INF/classes/oscache.tld</taglib-location></taglib>
(2)而對JSP2.0版技術規範的Web應用系統,則不再需要在Web專案中新增上面的設定專案。因為在web.xml配置檔案不再提供對<taglib>標籤的支援參看如下示例圖所示。
可能有讀者會有疑問,如何知道自己的Web應用系統專案所依賴的JSP技術規範的版本?這可以在IDE開發工具(如MyEclipse開發工具)中透過幫助來獲得Web應用系統專案所依賴的JSP技術規範的版本,因為此Web應用系統專案是由開發工具構建的。
7、在需要快取的Web頁面中新增對<taglib>標籤庫的引用
(1)對於JSP1.2版技術規範的Web應用系統需要新增如下的語句
<%@ taglib uri="oscache" prefix="cache" %>
(2)而對JSP2.0版技術規範的Web應用系統需要新增如下的語句,參看如下示例圖所示
<%@ taglib uri="/WEB-INF/classes/oscache.tld" prefix="cache" %>
(3)根據應用的要求新增OSCache快取框架對應的標籤,參看如下示例圖中的應用示例
<cache:cache key="allTitleInfoList" refresh="false" scope="session"> 頁面中待快取的動態資料(根據應用的需要新增)</cache:cache>
8、測試OSCache快取框架在本專案中快取的頁面應用效果
將Web示例專案部署到Web伺服器,然後在瀏覽器中瀏覽測試頁面,並輸入查詢條件,系統後臺返回查詢的結果資訊(本Web示例專案中的測試資料都是模擬資料,參看如下示例圖所示)。在瀏覽的過程中第一次訪問需要等待一定時間,查詢結果頁面才顯示出。但一旦查詢結果頁面顯示完畢後,如果再次重複查詢請求,查詢結果頁面迅速顯示出,因為OSCache快取框架會判斷在快取中的資料是否發生了變化,如果沒有變化將不再會重複查詢。