Web開發人員通過Java的緩衝功能可以方便快捷的改善應用程式的效能。對於java應用程式來說,一個強大的分布式Java緩衝系統(JCS),是用簡單的API就可以進行高度配置的工具。這篇文章概要的介紹了JCS,並且展示了怎樣用它為Web應用程式提速。
很多的傳統型應用程式正在被重寫成Web應用程式,理想情況下,被重寫後的應用程式應該和案頭版本的應用程式一樣快捷並且具有延展性。幾乎所有的Web應用都可以通過JCS在速度方面獲得大幅提高。經常性的緩衝那些很少改變的的資料是減少使用者等待時間的非常好的方法,用簡單的API處理快取資料的功能能夠協助我們實現這個目標。開源的JCS(Apache
Jakarta 工程)就是這樣的一個工具,這篇文章解釋怎樣配置和使用JCS來為Web應用程式快取資料。
JCS概要
JCS是一個用Java語言編寫的可以用於建立案頭和Web應用程式的緩衝系統,它為一下處理提供了方便的機制
・在緩衝中儲存資料;
・從緩衝中取得資料;
・從緩衝中刪除資料等。
使用JCS,可以把被快取資料儲存到指定的不同的資料存放區地區。JCS定義了四種核心儲存地區的類型:memory、disk、lateral和remote。我們可以一起使用這些核心儲存地區來獲得更大的快取資料的靈活性。如可以指定首先被使用的儲存地區,在緩衝失敗的時候使用另外一個儲存地區。
Memory區
Memory地區是一個使用LRU(Least
Recently Used)運算規則的純記憶體快取區域,在記憶體緩衝區被填滿的時候,LRU首先刪除最近最少被使用的快取資料。這個資料區有比較好執行效率,因此大多數的使用者把它指定為預設首先被使用的緩衝區。
Disk 區
磁碟區是Web伺服器的檔案磁碟上的一個快取資料的地區。要改善效能,可以在記憶體中儲存快取資料的索引值(keys)而在檔案磁碟上緩衝實際的資料。在典型的首先使用記憶體區的JCS的配置中,任何不能在記憶體中持有的資料,就要被寫到磁碟區中。
Lateral 區
Lateral緩衝區提供一種把快取資料分配個橫向關聯的多個伺服器的方法,快取服務器必須開啟一個用於監聽的連接埠,並且建立一個socket連結。因為這個儲存區不能保證緩衝間資料的一致性,所以這成為我們要面對的潛在問題。但是如果要設計使用這個儲存區,那麼這個問題是不太可能發生的。
Remote 區
Remote區使用RMI(Remote Method
Invocation)提供一個緩衝區。這個儲存區使用處理快取資料的遠程伺服器。遠程快取服務器能夠被多個JCS用戶端應用程式用於儲存快取資料。被定義的監聽器用於搜集來自用戶端和伺服器的的請求。這個緩衝區有助於緩解對系列化和多連結點的開銷。
JCS配置
配置JCS的過程就像建立和編寫cache.ccf檔案一樣簡單。Cache.ccf檔案定義了要使用的緩衝區以及這些緩衝區的屬性或選項,把這個檔案結合到應用程式上需要一個方便快捷的刻度緩衝的方法。下面是為了顯示主要的配置點製作的一個儘可能簡單的例子。你可以指定很多選項和配置來適應你所需要的正確的配置。
最基本的cache.cff檔案-----一個純記憶體緩衝配置
jcs.default=jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
jcs.default.cacheattributes.MaxObjects=1000
jcs.default.cacheattributes.MemoryCacheName=
org.apache.jcs.engine.memory.lru.LRUMemoryCache
在上面的配置中,最後一行指定了LRUMemoryCache作為記憶體緩衝,並且在記憶體中保持的對象數被設定為1000。
大多數的應用程式的緩衝系統需要比上面配置更廣泛的配置,在下面的配置中,使用了記憶體區,並且在定義自己的儲存區時,使用磁碟區。
jcs.default=DISK_REGION
jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
jcs.default.cacheattributes.MaxObjects=1000
jcs.default.cacheattributes.MemoryCacheName=
org.apache.jcs.engine.memory.lru.LRUMemoryCache
jcs.region.OUR_REGION=DISK_REGION
jcs.region.OUR_REGION.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
jcs.region.OUR_REGION.cacheattributes.MaxObjects=1000
jcs.region.OUR_REGION.cacheattributes.MemoryCacheName=
org.apache.jcs.engine.memory.lru.LRUMemoryCache
jcs.region.OUR_REGION.cacheattributes.UseMemoryShrinker=true
jcs.region.OUR_REGION.cacheattributes.MaxMemoryIdleTimeSeconds=3600
jcs.region.OUR_REGION.cacheattributes.ShrinkerIntervalSeconds=60
jcs.region.OUR_REGION.cacheattributes.MaxSpoolPerRun=500
jcs.region.OUR_REGION.elementattributes=org.apache.jcs.engine.ElementAttributes
jcs.region.OUR_REGION.elementattributes.IsEternal=false
jcs.auxiliary.DISK_REGION=org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheFactory
jcs.auxiliary.DISK_REGION.attributes=
org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheAttributes
jcs.auxiliary.DISK_REGION.attributes.DiskPath=c:/jcs/disk_region
jcs.auxiliary.DISK_REGION.attributes.maxKeySize=100000
在上面的配置中的第一行把DISK_REGION設定為預設的儲存區。DISK_REGION是IndexedDiskCacheFactory類型,並且指定快取檔案要存放在磁碟上的c:/jcs/disk_region目錄中。上面配置中的第二組定義了自己儲存區,並且為它添加了一些選項,這種同時指定記憶體區和磁碟區的配置是常用的一種類型。上面配置中第三組中定義一個備用區。
JCS有連個依賴:concurrent和commons-logging(在JCS1.2.7.0以前的版面中,有另外連個依賴:commos-collections和commons-lang)