Ich habe Probleme zu verstehen, wann der Ruhezustand den Cache der zweiten Ebene erreicht und wann er den Cache ungültig macht.
Folgendes verstehe ich derzeit:
- Der Cache der zweiten Ebene speichert Entitäten zwischen Sitzungen. Der Bereich ist die SessionFactory
- Sie müssen angeben, welche Entitäten zwischengespeichert werden sollen. Standardmäßig wird keine Entität zwischengespeichert
- Der Abfragecache speichert die Ergebnisse von Abfragen im Cache.
Was ich nicht verstehe ist
- Wann trifft der Ruhezustand diesen Cache?
- Angenommen, ich habe den Cache der zweiten Ebene eingerichtet, aber nicht das Abfrage-Caching. Ich möchte meine Kunden zwischenspeichern, es gibt 50000 von ihnen. Wie kann ich die Kunden aus dem Cache abrufen?
- Ich gehe davon aus, dass ich sie per ID aus dem Cache abrufen kann. Das wäre einfach, aber auch nicht zwischenspeicherwürdig. Aber was ist, wenn ich mit all meinen Kunden rechnen möchte? Angenommen, ich möchte eine Liste der Kunden anzeigen. Wie würde ich dann auf sie zugreifen?
- Wie würde ich alle meine Kunden erreichen, wenn das Zwischenspeichern von Abfragen deaktiviert ist?
- Was würde passieren, wenn jemand einen der Kunden aktualisieren würde?
- Würde dieser Kunde im Cache ungültig werden oder würden alle Kunden ungültig werden?
Oder denke ich, dass Caching völlig falsch ist? Was wäre in diesem Fall angemessener für die Verwendung des Cache der zweiten Ebene? Die Dokumentation zum Ruhezustand ist überhaupt nicht klar, wie der Cache in der Realität funktioniert. Es gibt nur Anweisungen zum Einrichten.
Update: Ich habe verstanden, dass der Cache der zweiten Ebene (ohne Abfrage-Cache) gut zum Laden von Daten anhand von IDs geeignet ist. Zum Beispiel habe ich ein Benutzerobjekt, das ich in jeder Anforderung in einer Webanwendung auf Berechtigungen prüfen möchte. Wäre dies ein guter Fall, um den Datenbankzugriff durch Zwischenspeichern des Benutzers im Cache der zweiten Ebene zu reduzieren? Als würde ich die Benutzer-ID in der Sitzung speichern oder wo und wann immer ich nach Berechtigungen suchen muss, würde ich den Benutzer anhand seiner ID laden und Berechtigungen überprüfen.