Java Object Cache

Intelligente Gedächtnisregeln

Von Barbara Wenz

Ein Java Object Cache (JOC) ist ein Zwischenspeicher, der für verbesserten Datenzugriff sorgt, indem er sich nach bestimmten Regeln einmal abgerufene Informationen „merkt“ und so das nächste Mal rasch wieder parat hat.

Das Prinzip ist ähnlich wie bei Ihrem Browser-Cache, wenn Sie im Internet unterwegs sind: Der Speicher merkt sich den Inhalt der Seiten, die Sie kürzlich aufgerufen haben. Falls Sie dieselbe Seite noch einmal aufrufen, bezieht der Browser die Daten schnell und ohne großen Transfer aus dem Zwischenspeicher auf Ihrem Rechner statt noch einmal aus dem Internet. In diesem Fall ist der Cache auf der Client-Seite sinnvoll; es gibt jedoch andere Fälle, in denen er auf der Server-Seite besser aufgehoben ist.

Zugriff und Prozesse

Ein „Java-Objekte-Zwischenspeicher“ löst ein Problem von Web-Anwendungen: Darauf greifen nämlich unter Umständen sehr viele Nutzer gleichzeitig zu. Normalerweise sind die Anwendungsdaten in einer relationalen Datenbank oder einem entsprechenden Dateisystem abgelegt, und man muss beim Zugriff auf diese Quellen eine gewisse Zeit und Leistung als nötig veranschlagen. Weil es dabei immer Engstellen gibt, kann es sein, dass die Anwendung dabei ziemlich langsam wird oder gar abstürzt, falls allzu viele parallele Anfragen eingehen.

Der JOC schafft hier Abhilfe, indem er die angeforderten Objekte bereits präsent hält; das gilt speziell für solche, auf die häufig zugegriffen wird und die relativ aufwändig zu generieren sind. Die Daten müssen also nicht jedes Mal wieder neu (erzeugt und) geladen werden. Ein Zwischenspeicher ermöglicht es den Anwendungen auch, Objekte über Anfragen und User hinweg gemeinsam und abgestimmt zu nutzen.

Die unmittelbaren Vorteile sind:

  • weniger Direktzugriffe auf die Datenbank,
  • reduzierte Objekterzeugung,
  • mehrfache (auch parallele) Objektnutzung und
  • effizientere Ressourcennutzung.

Speicherlast und Synchronisierung

Das bedeutet außerdem, dass das gesamte System sehr viel besser skalierbar wird. Andererseits kann die Speichergröße ein gewisses Problem werden, wenn sich eine Menge von Objekten darin herumtreibt, die in Wahrheit gar nicht benötigt werden. Ein optimales JOC-Framework misst sich daher an den entsprechenden Auswahl- und Vorhaltregeln, die bestimmen, welche Objekte wie lange im Cache bleiben (Passwörter und Zugangsdaten aus Sicherheitsgründen z.B. besser nicht). Hinzu kommt das Problem der Synchronisierung: Wenn sich die Originalquelle ändert und der Cache das nicht mitbekommt, wird die dort gelagerte Fassung inkonsistent.

Nützliche Links

Es gibt eine ganze Reihe von Opensource-Lösungen für Java Caches.