Archive for July, 2007

Caching mit OSCache Teil 2

Sunday, July 1st, 2007

Zentrales Element im OSCache sind die konkreten Implementierungen der AbstractCacheAdministrators Klasse. OSCache bietet zwei Implementierungen:

Die Funktionsweise eines CacheAdministrators ähnelt einer HashMap, geht aber weit darüber hinaus. So können Cache-Einträge ablaufen und müssen bei erneuten Zugriffsversuch erneuert werden. Auch die Anzahl von Cache-Einträgen soll limitiert werden. Mit der Methode setAlgorithmClass(String clazz) kann der Algorithmus konfiguriert werden.
Zur Verfügung stehen:

  • FIFOCache
  • LRUCache
  • UnlimitedCache

Beispiel:
Das nachfolgende Beispiel verwendetet einen FIFOCache mit max. 20 Cache-Einträgen. Unter dem Key “myKey” wird ein String in den Cache abgelegt und anschliessend 2x darauf zugegriffen. Beim zweiten Mal ist dieses Objekt “abgelaufen” und muss erneuert werden.

  1. GeneralCacheAdministrator cAdmin = new GeneralCacheAdministrator();
  2.         cAdmin.setAlgorithmClass("com.opensymphony.oscache.base.algorithm.FIFOCache");
  3.         cAdmin.setCacheCapacity(20);
  4.  
  5.         cAdmin.putInCache("myKey", "myObject");
  6.  
  7.         // first attempt to access the cache object
  8.         try {
  9.             System.out.println(cAdmin.getFromCache("myKey", 2));
  10.             // OK, object is not "older" than 2 seconds
  11.         } catch (NeedsRefreshException nre) {
  12.             System.out.println("expired object:=" + nre.getCacheContent());
  13.         }
  14.  
  15.         // Sleep 3 seconds
  16.         Thread.currentThread().sleep(3000);
  17.         try {
  18.             System.out.println(cAdmin.getFromCache("myKey", 2));
  19.             // NOT OK, object is definately older than 2 seconds
  20.             // --> NeedsRefreshException will be thrown
  21.         } catch (NeedsRefreshException nre) {
  22.             System.out.println("expired object:=" + nre.getCacheContent());
  23.         }
  24.  
  25.         cAdmin.destroy();

Ausgabe:
myObject
expired object:=myObject

Das Cachingframework bietet zusätzlich eine eigene JSP-Taglibrary und einen Servlet-Filter, der transparent für die Applikation ganze Seiten oder binäre Dateien cachen kann. Mehr dazu im 3. Teil.

Bookmark and Share