使用 Java? 技術(shù)的 Web 開發(fā)人員可以使用緩存實(shí)用程序快速提升他們的應(yīng)用程序的性能。Java 緩存系統(tǒng)(Java Caching System,JCS)是一個(gè)用于 Java 應(yīng)用程序的強(qiáng)大分布式緩存系統(tǒng),它是擁有簡(jiǎn)單 API 的高度可配置的工具。本文將概述 JCS 并展示如何使用它來提高 Web 應(yīng)用程序的速度。<!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --> <!--END RESERVED FOR FUTURE USE INCLUDE FILES-->
許多 Web 應(yīng)用程序會(huì)根據(jù)桌面應(yīng)用程序重新編寫;理想情況下,這些應(yīng)用程序的速度和可伸縮性應(yīng)該與桌面版本一樣。幾乎所有 Web 應(yīng)用程序都可以從速度方面的增長(zhǎng)獲益。緩存被頻繁查看但很少更改的數(shù)據(jù)是一種減少用戶等待時(shí)間的有效方式。一個(gè)實(shí)用程序可以幫您實(shí)現(xiàn)這個(gè)目標(biāo),它使用簡(jiǎn)單 易用的 API 來輕松處理數(shù)據(jù)緩存。開放源碼 JCS(即一個(gè) Apache Jakarta 項(xiàng)目)就是這樣一種工具。本文將說明如何配置和使用 JCS 來緩存 Web 應(yīng)用程序的數(shù)據(jù)。
JCS 是一個(gè)用 Java 語(yǔ)言編寫的緩存系統(tǒng),可以使用它來創(chuàng)建 Java 桌面和 Web 應(yīng)用程序。它提供了在緩存器中存儲(chǔ)數(shù)據(jù)、從緩存器中刪除數(shù)據(jù)等方便機(jī)制。
使用 JCS 可以在各種指定的數(shù)據(jù) 區(qū)域 中存儲(chǔ)緩存數(shù)據(jù)。JCS 定義了 4 種類型的核心區(qū)域:內(nèi)存區(qū)域、磁盤區(qū)域、外圍區(qū)域和遠(yuǎn)程區(qū)域。可以結(jié)合使用這些核心區(qū)域以在如何存儲(chǔ)緩存數(shù)據(jù)、將緩存數(shù)據(jù)存儲(chǔ)在什么地方等方面獲得更大的靈活性。您可以指定首次使用哪個(gè)區(qū)域,以及發(fā)生故障時(shí)轉(zhuǎn)移到哪個(gè)區(qū)域。
內(nèi)存區(qū)域是一個(gè)使用最近最少算法(Least Recently Used,LRU)的純內(nèi)存緩存區(qū)域。當(dāng)內(nèi)存緩存區(qū)域滿時(shí),LRU 會(huì)首先刪除最近最少使用的緩存數(shù)據(jù)。這個(gè)數(shù)據(jù)區(qū)域執(zhí)行良好,大多數(shù) JCS 用戶將它指定為最先使用的默認(rèn)緩存區(qū)域。
![]() |
|
磁盤區(qū)域是在 Web 服務(wù)器的文件磁盤上緩存數(shù)據(jù)。為了提高性能,JCS 在文件磁盤上存儲(chǔ)實(shí)際緩存數(shù)據(jù)的同時(shí),會(huì)在內(nèi)存中存儲(chǔ)緩存數(shù)據(jù)鍵。在首先使用內(nèi)存區(qū)域的典型 JCS 配置中,任何無(wú)法在內(nèi)存區(qū)域中保存的數(shù)據(jù)都會(huì)寫入磁盤區(qū)域中。
外圍區(qū)域提供一種可配置方式來在多臺(tái)服務(wù)器之間分發(fā)緩存數(shù)據(jù)。緩存數(shù)據(jù)服務(wù)器必須有一個(gè)開放的用于偵聽的端口,而且必須創(chuàng)建一個(gè)套接字連接。這個(gè)區(qū)域存在一個(gè)潛在問題,因?yàn)樗荒鼙WC各緩存之間的數(shù)據(jù)的一致性。但如果是按計(jì)劃使用該區(qū)域,則不會(huì)出現(xiàn)這個(gè)問題。
遠(yuǎn) 程區(qū)域提供了一個(gè)使用遠(yuǎn)程方法調(diào)用(RMI)API 的緩存區(qū)域。這個(gè)區(qū)域使用一臺(tái)遠(yuǎn)程服務(wù)器處理緩存數(shù)據(jù)。這臺(tái)遠(yuǎn)程緩存服務(wù)器可以被多個(gè) JCS 客戶端應(yīng)用程序用于存儲(chǔ)緩存數(shù)據(jù)。一些偵聽器被定義用于收集來自客戶端和服務(wù)器的請(qǐng)求。這個(gè)緩存區(qū)域幫助減少串行化和多個(gè)連接點(diǎn)的開銷。
![]() ![]() |
配置 JCS 就是簡(jiǎn)單地創(chuàng)建和填充一個(gè) cache.ccf 文件。這個(gè)文件定義緩存應(yīng)該使用哪些區(qū)域,以及這些區(qū)域的屬性或選項(xiàng)。根據(jù)應(yīng)用程序的需求配置這個(gè)文件是一種快速擴(kuò)展緩存的簡(jiǎn)便方式。您可以指定許多適合配置的選項(xiàng)和屬性來滿足需求。
清單 1 顯示的是最基本的 cache.ccf 文件 — 一個(gè)純內(nèi)存緩存配置:
清單 1. JCS 的基本配置
|
從清單 1 中可以看出,該配置文件將內(nèi)存緩存指定為一個(gè)
LRUMemoryCache
。還可以看到,內(nèi)存中能保存的對(duì)象的最大數(shù)量被設(shè)置為
1000
。
大多數(shù)應(yīng)用程序的緩存系統(tǒng)配置要比清單 1 中復(fù)雜得多。在清單 2 的配置中,我在定義自己的區(qū)域(
OUR_REGION
)時(shí)使用了一個(gè)內(nèi)存區(qū)域和一個(gè)磁盤區(qū)域:
清單 2. 在 JCS 配置中定義的區(qū)域
|
![]() |
|
清單 2 中的第一行表明該配置將默認(rèn)區(qū)域設(shè)置為
DISK_REGION
。
DISK_REGION
是
IndexedDiskCacheFactory
類型,并且該文件在磁盤上指定為 c:/jcs/disk_region。清單 2 中的第二個(gè)配置組定義了我自己的區(qū)域,我為它添加了一些選項(xiàng),這種類型的配置(在指定用戶定義區(qū)域時(shí)同時(shí)使用內(nèi)存區(qū)域和磁盤區(qū)域)是很常見的。清單 2 中的第 3 個(gè)配置組定義了一個(gè)
輔助區(qū)域
。
JCS 有兩個(gè)依賴項(xiàng):
concurrent
和
commons-logging
(JCS 1.2.7.0 之前的版本中,還有兩個(gè)其他依賴項(xiàng):
commons-collections
和
commons-lang
)。
![]() ![]() |
學(xué)習(xí) JCS 基礎(chǔ)知識(shí)的一個(gè)好方法是查看 API 最常用的方法。最好從初始化區(qū)域開始。初始化 JCS 緩存區(qū)域?qū)ο竽苁鼓L問大部分所需的常用方法。清單 3 初始化 JCS 對(duì)象并獲得一個(gè)默認(rèn)緩存區(qū)域?qū)嵗?
清單 3. 檢索默認(rèn)緩存區(qū)域
|
檢索 JCS 實(shí)例后,可以調(diào)用最需要的方法。
put
方法將一個(gè)新對(duì)象放入緩存中。接下來只需一個(gè)
key
(第一個(gè)參數(shù))和一個(gè)
value
(第二個(gè)參數(shù))。清單 4 顯示一個(gè)基本示例:
清單 4. 設(shè)置緩存項(xiàng)
|
清單 4 中的示例使用字符串值作為參數(shù),但是您可以使用任何對(duì)象。
檢索緩存對(duì)象只不過是使用 JCS 提供的
get
方法。清單 5 顯示了一個(gè)簡(jiǎn)單示例。同樣,本例使用了一個(gè)字符串參數(shù),但您可以使用任何對(duì)象。
清單 5. 檢索緩存項(xiàng)
|
測(cè)試緩存數(shù)據(jù)的有效性可能是處理緩存系統(tǒng)時(shí)需要使用的另一種方法。在 JCS 中,沒有定義只測(cè)試緩存項(xiàng)是否存在的測(cè)試緩存方法。但是
get
方法的返回值可以幫助您。清單 6 顯示了一種獲得此必要功能的方式:
清單 6. 測(cè)試緩存項(xiàng)的有效性
|
最后需要幾個(gè)用于在使用 JCS、緩存項(xiàng)和緩存區(qū)域后清除它們的常用緩存實(shí)用程序。JCS 提供了一種
clear
方法,用于從調(diào)用的緩存區(qū)域中刪除所有緩存數(shù)據(jù)。此外,還提供了一個(gè)
remove
方法,用于刪除指定緩存項(xiàng)。
dispose
方法也可以處理初始化的 JCS 區(qū)域。清單 7 顯示了如何使用這些方法:
清單 7. 清除緩存區(qū)域
|
![]() ![]() |
JCS 優(yōu)于其他緩存系統(tǒng)(請(qǐng)參閱 參考資料 )的一個(gè)地方是它可以很好地使用對(duì)象。大多數(shù) Web 應(yīng)用程序是使用面向?qū)ο蟮姆椒ㄍㄟ^ Java 技術(shù)創(chuàng)建的。例如,與連續(xù)從數(shù)據(jù)庫(kù)中逐段檢索對(duì)象相比,緩存對(duì)象使應(yīng)用程序能夠更好地執(zhí)行。
設(shè)計(jì)一個(gè)簡(jiǎn)單的面向?qū)ο蟮?JCS 站點(diǎn)的第一個(gè)步驟是創(chuàng)建需要存儲(chǔ)的對(duì)象。在本例中,我將開發(fā)一個(gè)基本 blogging 站點(diǎn)。清單 8 顯示了我將使用的
BlogObject
類:
清單 8.
BlogObject
類
|
在一個(gè)類中表示對(duì)象后,接著還需要一個(gè)類來管理該對(duì)象。管理器處理所有與 blog 對(duì)象相關(guān)的管理和緩存功能。在本例中,管理器將處理三大任務(wù):
- 檢索 blog 對(duì)象
- 在緩存中設(shè)置 blog 對(duì)象
- 從緩存中清除 blog 對(duì)象
如清單 9 所示,
getBlog
方法檢索 blog 對(duì)象。該方法首先試圖從緩存獲得 blog 對(duì)象。如果該對(duì)象不在緩存中,它將根據(jù)其他機(jī)制獲取該對(duì)象:
清單 9. 通過 blog 管理器檢索 blog 對(duì)象
|
在清單 9 中,我使用一個(gè)數(shù)據(jù)庫(kù)作為檢索 blog 對(duì)象的替代機(jī)制。根據(jù)另一種機(jī)制檢索該對(duì)象時(shí),應(yīng)該將該對(duì)象設(shè)置為緩存,以便下一次檢索可以直接從該緩存獲取這個(gè)對(duì)象。
如清單 10 所示,
setBlog
方法將 blog 對(duì)象放在緩存中。這個(gè)方法比較簡(jiǎn)單,因?yàn)樗皇鞘褂脗魅氲男畔?chuàng)建一個(gè)新的 blog 對(duì)象,然后將這個(gè)對(duì)象放在緩存中。
清單 10. 通過 blog 管理器將 blog 對(duì)象放在緩存中
|
如清單 11 所示,
cleanBlog
方法要么從緩存中清除一個(gè)指定的 blog,要么從緩存中清除掉所有 blog。這個(gè)方法使用 JCS 的
remove
和
clear
方法來清除緩存對(duì)象。
清單 11. 通過 blog 管理器從緩存中刪除 blog 對(duì)象
|
前面的幾個(gè)類展示了使用 JCS 緩存對(duì)象是很簡(jiǎn)單的。擁有對(duì)象管理器并使用簡(jiǎn)單的對(duì)象表示之后,您就獲得一種在 Web 應(yīng)用程序中處理對(duì)象的簡(jiǎn)單但強(qiáng)大的方法。
![]() ![]() |
JCS 提供了更多方法,向應(yīng)用程序添加緩存所用的方法只是其中的一小部分。例如,它提供了收集緩存對(duì)象和緩存區(qū)域元數(shù)據(jù)的實(shí)用程序。您可以輕松檢索以下內(nèi)容:
- 緩存鍵名稱
- 創(chuàng)建緩存項(xiàng)的時(shí)間
- 緩存可以存在的最長(zhǎng)時(shí)間
- 緩存過期時(shí)間
清單 12 中的例子顯示如何檢索緩存項(xiàng)的元數(shù)據(jù):
清單 12. 檢索緩存項(xiàng)的元數(shù)據(jù)
|
緩存項(xiàng)的元數(shù)據(jù)很有用,但獲取各個(gè)緩存區(qū)域的元數(shù)據(jù)也很有幫助。這個(gè)信息讓您知道緩存有多少數(shù)據(jù),它們會(huì)進(jìn)入哪個(gè)區(qū)域,包括緩存丟失、緩存提示和緩存更新。清單 13 中的示例顯示如何獲得此信息:
清單 13. 檢索緩存區(qū)域的元數(shù)據(jù)
|
收集緩存區(qū)域和項(xiàng)的元數(shù)據(jù)能幫助您分析 Web 站點(diǎn)的哪些區(qū)域和項(xiàng)目需要優(yōu)化。元數(shù)據(jù)也能幫助您管理時(shí)間敏感型的緩存數(shù)據(jù)。例如,您可以使用每個(gè)緩存項(xiàng)的最長(zhǎng)生命周期和過期時(shí)間來為需要更新數(shù)據(jù)的特定用戶刷新緩存數(shù)據(jù)。
![]() ![]() |
JCS 是為 Java 開發(fā)人員提供的功能強(qiáng)大但簡(jiǎn)單易用的緩存系統(tǒng)。它為桌面和類似的 Web 應(yīng)用程序提供數(shù)據(jù)緩存。類似桌面的 Web 應(yīng)用程序的發(fā)展前景是提高速度和敏捷性。緩存數(shù)據(jù)對(duì)這些方面非常有益。本文概述如何配置和使用 JCS。此外,還討論了基本緩存方法所需要語(yǔ)法,以及如何在常見 Web 應(yīng)用程序中緩存對(duì)象和檢索緩存元數(shù)據(jù)。解了 JCS 的基本知識(shí)之后,您現(xiàn)在可以利用數(shù)據(jù)緩存功能來開發(fā)下一個(gè) Web 站點(diǎn)了。您還可以學(xué)習(xí)其他幾個(gè)提供高級(jí)功能的 JCS 區(qū)域,比如 HTTP Servlet 訪問、JCS 實(shí)用程序、基本 HTTP 驗(yàn)證和其他輔助區(qū)域。
學(xué)習(xí)
-
您可以參閱本文在 developerWorks 全球網(wǎng)站上的
英文原文
。
-
Java Caching System
:JCS 的官方網(wǎng)站。
-
Java 緩存系統(tǒng) API
:JCS 的 API 文檔。
-
Ehcache
:Ehcache 是另一個(gè)用于 Java 應(yīng)用程序的多用途緩存系統(tǒng)。
-
OSCache
:OSCache 是一個(gè)專門處理 JSP 內(nèi)容緩存的緩存系統(tǒng)。
-
cache4j
:一個(gè)用于 Java 對(duì)象的簡(jiǎn)單緩存器。
-
IBM Cache Advisor
:Cache Advisor 是一個(gè)智能建議工具,能提供最優(yōu)化的緩存建議。
-
在
技術(shù)書店
瀏覽關(guān)于這些主題和其他技術(shù)主題的圖書。
-
developerWorks Java 技術(shù)專區(qū)
:提供了幾百篇有關(guān) Java 編程各個(gè)方面的文章。
獲得產(chǎn)品和技術(shù)
-
JCS
:下載 JCS。
- 下載 IBM? 產(chǎn)品評(píng)估版 ,試用這些來自 DB2?、Lotus?、Rational?、Tivoli? 和 WebSphere? 的應(yīng)用程序開發(fā)工具和中間件產(chǎn)品。
![]() |
||
|
![]() |
Kellen Bombardier 是 IBM 的軟件工程師,他還是 Information Management 團(tuán)隊(duì)的開發(fā)人員。 |
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
