Apache'nin cache kütüphanesi Commons JCS (Java Cache System) web projelerinde veya uygulamarda, nesneleri cache'de saklamak için geliştirilmiş bir kütüphanedir. Bunu kullanmak için aşağıdaki jar'lar gerekmektedir :
- concurrent
- commons-logging
- 1.2.6.9 ve öncesi versiyonlar ek olarak :
- commons-collections
- commons-lang
- EDU.oswego.cs.dl.util.concurrent
- EDU.oswego.cs.dl.util.concurrent.misc
Eğer maven kullanıyorsanız :
<dependency>
<groupId>org.apache.jcs</groupId>
<artifactId>jcs</artifactId>
<version>1.3</version>
</dependency>
ile ekleyebilirsiniz
Konfigurasyon için aşağıdaki gibi bir dosyayı src klasörünüze (classpath'den bulunabilecek başka bir konuma da koyulabilir) koymanız gerekir:
# DEFAULT CACHE REGION
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
jcs.default.cacheattributes.UseMemoryShrinker=true
jcs.default.cacheattributes.MaxMemoryIdleTimeSeconds=3600
jcs.default.cacheattributes.ShrinkerIntervalSeconds=60
jcs.default.cacheattributes.MaxSpoolPerRun=500
jcs.default.cacheattributes.useDisk=false
jcs.default.cacheattributes.useRemote=false
jcs.default.elementattributes.MaxLifeSeconds=3600
jcs.default.elementattributes=org.apache.jcs.engine.ElementAttributes
jcs.default.elementattributes.IsEternal=false
jcs.region.GENERAL_DATA=
jcs.region.GENERAL_DATA.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
jcs.region.GENERAL_DATA.cacheattributes.MaxObjects=1000
jcs.region.GENERAL_DATA.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache
jcs.region.GENERAL_DATA.cacheattributes.UseMemoryShrinker=true
jcs.region.GENERAL_DATA.cacheattributes.MaxMemoryIdleTimeSeconds=3600
jcs.region.GENERAL_DATA.cacheattributes.ShrinkerIntervalSeconds=60
jcs.region.GENERAL_DATA.cacheattributes.MaxSpoolPerRun=500
jcs.region.GENERAL_DATA.cacheattributes.useDisk=false
jcs.region.GENERAL_DATA.cacheattributes.useRemote=false
jcs.region.GENERAL_DATA.elementattributes.MaxLifeSeconds=43200
jcs.region.GENERAL_DATA.elementattributes=org.apache.jcs.engine.ElementAttributes
jcs.region.GENERAL_DATA.elementattributes.IsEternal=false
jcs.region.GENERAL_DATA_2=
jcs.region.GENERAL_DATA_2.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
jcs.region.GENERAL_DATA_2.cacheattributes.MaxObjects=1000
jcs.region.GENERAL_DATA_2.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache
jcs.region.GENERAL_DATA_2.cacheattributes.UseMemoryShrinker=true
jcs.region.GENERAL_DATA_2.cacheattributes.MaxMemoryIdleTimeSeconds=3600
jcs.region.GENERAL_DATA_2.cacheattributes.ShrinkerIntervalSeconds=60
jcs.region.GENERAL_DATA_2.cacheattributes.MaxSpoolPerRun=500
jcs.region.GENERAL_DATA_2.cacheattributes.useDisk=false
jcs.region.GENERAL_DATA_2.cacheattributes.useRemote=false
jcs.region.GENERAL_DATA_2.elementattributes.MaxLifeSeconds=3600
jcs.region.GENERAL_DATA_2.elementattributes=org.apache.jcs.engine.ElementAttributes
jcs.region.GENERAL_DATA_2.elementattributes.IsEternal=false
Yukarıda varsayılan cahce ayarı yanında GENERAL_DATA ve GENERAL_DATA_2 adında iki farklı cache bölgesi yarattık. GENERAL_DATA bölgesine eklenen nesneler 12 saat (MaxLifeSeconds=43200 şeklinde tanımlanmıştır), GENERAL_DATA_2 bölgesine eklenen nesneler ise 1 saat cache'de saklanacaklardır.
Cache'deki nesnelere aşağıdaki gibi nesne koyulabilir ve erişilebilir :
//Nesne koyulması
JCS.getInstance("GENERAL_DATA").put("test", "test verisi");
// Nesnenin okunması
String s=(String)JCS.getInstance("GENERAL_DATA").get("test");
Basit bir kullanım örneği aşağıdaki gibi olabilir :
public List getList(){
List list=null;
try {
list=(List)JCS.getInstance("GENERAL_DATA").get("test");
} catch (CacheException e) {
e.printStackTrace();
}
if(list!=null){
return list;
}
list=getFrom();// Liste veritabanından veya başka bir kaynakdan yüklenir...
try {
JCS.getInstance("GENERAL_DATA").put("test", list);
} catch (CacheException e) {
e.printStackTrace();
}
return list;
}
getList fonksiyonu önce cache'e bakmaktadır. Eğer cache'de liste varsa o liste gönderilmektedir. Eğer liste yoksa veritabanı veya başka bir yerden veriler yüklenmekte ve cache'e atılmaktadır. Aynı fonksiyon bir sonraki sefer çağrıldığında expire süresi geçilmediyse cache'den liste döndürülecektir