Caching mit OSCache Teil 2
Zentrales Element im OSCache sind die konkreten Implementierungen der AbstractCacheAdministrators Klasse. OSCache bietet zwei Implementierungen:
GeneralCacheAdministrator
Eine generelle Implementierung, die auch für Desktopanwendungen eingesetzt werden kann.ServletCacheAdministrator
Spezialisiert auf Caching im Servlet-Umfeld, kann unter anderem aufSessionoderServletContext-Ebene cachen.
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.
- GeneralCacheAdministrator cAdmin = new GeneralCacheAdministrator();
- cAdmin.setAlgorithmClass("com.opensymphony.oscache.base.algorithm.FIFOCache");
- cAdmin.setCacheCapacity(20);
- cAdmin.putInCache("myKey", "myObject");
- // first attempt to access the cache object
- try {
- // OK, object is not "older" than 2 seconds
- } catch (NeedsRefreshException nre) {
- }
- // Sleep 3 seconds
- try {
- // NOT OK, object is definately older than 2 seconds
- // --> NeedsRefreshException will be thrown
- } catch (NeedsRefreshException nre) {
- }
- 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.
July 18th, 2007 at 6:51 pm
Hi Heiko
Hab noch zwei kleine Details:
In Zeile 1 erzeugst du eine Variable cAdmin
und in Zeile 25 rufst du cacheAdmin.destroy() auf
ich denke mal es müsste cAdmin.destroy heissen.
Dann stimmt die Doku in Zeile 15 nicht mit der Implementation in Zeile 16 überein
Aber sonst, cool
Danke für den Eintrag Ist Intressant
July 18th, 2007 at 7:14 pm
Korrigiert. Vielen Dank für den Hinweis !