Unterstützt Ehcache standardmäßig Multithreading oder sind Konfigurationsänderungen erforderlich? Bei Multi Threading meiner Anwendung mit Ehcache habe ich festgestellt, dass die Anzahl der DB-Treffer tatsächlich steigt, d. H. Es ist kein globaler Cache für alle Threads verfügbar, obwohl meine Cache alle Singletons sind. Irgendwelche Vorschläge?Ehcache & MultiThreading
Antwort
Diese Frage beantworten helfen kann, von the FAQ:
Ist es sicher fädeln Elementwerte nach dem Abrufen von einem Cache ändern?
Denken Sie daran, dass ein Wert in einem Cache-Element global von mehreren Threads aus zugänglich ist. Es ist inhärent nicht Thread-sicher, den Wert zu ändern. Es ist sicherer, einen Wert abzurufen, das Cache-Element zu löschen und dann den Wert erneut einzufügen.
(Betonung von mir hinzugefügt)
Vom official documentation erscheint es speziell gebaut und getestet gut, so lange unter sehr gleichzeitigen Zugriff laufen, da Sie nicht Element
von den mehreren Threads ändern Sie .
Aber das bedeutet natürlich nicht, dass die Verwendung von Ehcache andere Teile Ihres Code-Threads sicher macht. Wenn Sie denselben Wert aus mehreren Threads (mit demselben Schlüssel) abrufen, wird die Instanz möglicherweise freigegeben und Sie müssen wissen, was Sie tun, bevor Sie sie ändern. Am besten scheint unveränderliche Objekte wie Zeichenfolgen als zwischengespeicherte Werte zu verwenden.
Eine weitere Option ist die explizite Sperr-API von ehcache zu betrachten: http://ehcache.org/documentation/explicitlocking.html, da jede Diskussion über Ehcache und Multithreading unvollständig ist, ohne auch diesen Aspekt zu berücksichtigen. –