mehrere Threads für Cache synchronisieren!

Fulk

Mitglied
Hi,

ich habe eine Web-Anwendung, in der im Hintergrund eine DB läuft. Um die Performance zu erhöhen wurde ein
Cache, mittels HashMaps, für Java Objekte implementiert.
Die Java-Objekte sind Repräsentanten von Zeilen der Datenbank (bspw. liegen in der Datenbank Kataloge o.ä., die dann durch
jeweils ein Objekt in der "Javawelt" abgebildet werden).

Das Problem ist nun, dass auf den Cache mehrere Threads gleichzeitig zugreifen können (typischen und altbekanntes Cache-Problem)
und somit Inkonsistenzen zwischen DB und Cache entstehen können.

Die Frage ist nun, wie bekomme ich die Java-Seite threadsicher/synchronisiert. Auf der DB-Seite besteht ja (durch ACID) bereits eine
Synchronisation von Transaktionen.

Reicht es aus, einfache mittels "synchronized" die Threads zu synchronisieren? Oder muss noch mehr beachtet werden?

Danke!
 
Hallo,

1) Caches zu implementieren ist keine triviale Angelegenheit (Concurrency, Invalidation ....) und es gibt bereits massig Implementierungen, die sich umfassend um das Thema kümmern...
http://java-source.net/open-source/cache-solutions


2) Wenn du sowas selber baust, dann verwende eine java.util.concurrent.ConcurrentHashMap

3) Für eine detaillierte Antwort bräuchte man noch ein paar Informationen.
Ist das mehr ein Read-Only cache?

Gruß Tom
 
Hallo!

Danke für Deine Antwort!

zu1)
Ja, ich kenne bereits einige Implementierungen (OSCAche, EHCache, ...). Ich möchte aber erstmal sehen, ob so etwas auch mit Bordmitteln machbar.

zu 3)
Momentan ja, es sind statische Objekte, von denen nur gelesen wird. Tendenziell sollen aber dynamische, veränderbare Objekte gecacht werden.
 
Zurück