Auf der Homepage des Online -Einkaufszentrums gibt es beliebte Produkte, sodass die Klickrate dieser Produkte sehr hoch ist. Wenn ein Benutzer auf ein beliebtes Produkt klickt, muss er wie auf Taobao die detaillierte Informationsseite des Produkts eingeben. Jedes Mal, wenn Sie klicken, müssen Sie zum Hintergrund gehen, um die detaillierten Informationen des Produkts abzufragen, und Sie senden die entsprechende SQL -Anweisung. Jedes Mal, wenn Sie die detaillierte Seite aktualisieren, senden Sie auch die SQL -Anweisung. Auf diese Weise wird die Leistung definitiv stark betroffen sein. Wenn Sie dann den sekundären Cache von Hibernate verwenden, können Sie dieses Problem lösen.
Einige Leute denken vielleicht, dass wir Umleitung verwenden können. Auf diese Weise können er beim ersten Besuch die Informationen herausfinden und in die Sitzung einfügen. In Zukunft können sie jedes Mal, wenn der Benutzer aktualisiert wird, zur Sitzung gehen, sodass in der Datenbank keine Abfragetechnik abfragen muss. Dies ist sinnvoll, kann das obige Problem jedoch nicht lösen, da wir lösen möchten, dass mehrere Benutzer auf dasselbe Produkt zugreifen und auf dasselbe Produkt klicken. Die Umleitung kann nur sicherstellen, dass derselbe Benutzer klickt oder aktualisiert. Aber der sekundäre Cache kann diese Probleme lösen.
Erläutern wir zunächst die sekundäre Caching -Technologie, die auf Hibernate4.3 basierend auf der Detaillierung basiert, und erstellen Sie dann eine spezifische Konfiguration für dieses Projekt.
1. Hibernate4.3 Level 2 Cache -Basiskonfiguration
Im Gegensatz zu Hibernate3 enthält das Kernpaket von Hibernate4.3 keine Cache-bezogenen Klassen. Wenn wir sekundären Cache verwenden möchten, müssen wir das zwischengespeicherte JAR -Paket hinzufügen. Aus dem offiziellen Download von Hibernate-Release-4.3.11.Final sind JAR-Pakete für den Sekundärcache erforderlich, das dem Projekt zuerst hinzugefügt werden muss. wie folgt:
Anschließend konfigurieren wir die sekundäre Cache-bezogene Konfiguration in hibernate.cfg.xml:
<Hibernate-Configuration> <Session-Factory> <Eigenschaft name = "Dialekt"> org.hibernate.dialect name = "hibernate.cache.region.factory_class"> org.hibernate.cache.ehcache.ehConegionfactory < /property> <maping /> <mapping /> <mapping /> <! Dies zeigt hauptsächlich beliebte Produkte auf der Homepage, so
Dann öffnen wir den Tomcat -Server und besuchen dann die Homepage, klicken auf beliebte Produkte und es werden keine SQL -Anweisungen im Hintergrund gesendet. Sie fragen sich vielleicht, ist der Cache der zweiten Stufe so einfach? Konfigurieren Sie diese beiden Elemente einfach? Der Grund, warum der Cache Level 2 bisher wirkt hat, ist, dass er eine Standardkonfiguration hat. In der obigen EHCACHE-CORE-2.4.3.JAR befindet sich eine EHCache-failSafe.xml-Datei, die bereits über eine Standardkonfiguration verfügt. Wir werden es später ausführlich analysieren. Lassen Sie uns zunächst die Query -Strategie von Hibernate analysieren:
2. Hibernate4.3 Abfragestrategie
Hibernate unterstützt zwei Abfragemethoden: Sitzungsabfrage und HQL -Abfrage.
Es gibt Sitzungen. Diese Methode arbeitet nur auf einem Datensatz, und es besteht die Standardeinstellung darin, Level -2 -Cache ohne Konfiguration zu unterstützen. Daher: Die schreibgeschützte Konfiguration ist für die Sitzung effektiv. Wenn im sekundären Cache in der Sitzung nur schreibgeschützte Schreibungen konfiguriert sind, schließen die Operationen der Sitzung.Update () und delete () () beide fehl. Wenn Sie erfolgreich sein möchten, müssen Sie Leseschreiber konfigurieren. Aber Save () und get () load () sind erfolgreich.
HQL: Diese Methode wird verwendet, um standardmäßig mehrere Datensätze wie List () und executeUpdate () Methoden zu betreiben. Diese Methode stellt die Sekundär-Cache-Konfiguration einschließlich schreibgeschützter schreibgeschützt. HQL's List () querys mehrere Datensätze, fordert die Datenbank direkt an und gibt die Abfrageergebnisse an den sekundären Cache, der den Anruf von Get () und Load () erleichtert. ExecuteUpdate unterstützt kein sekundäres Caching und wird auch direkt in der Datenbank aktualisiert. Hibernate stellt sicher, dass die Datenbank und der Cache synchronisiert sind. Hinweis: HQL hat keine Save () -Methode. Wenn Sie Daten einfügen müssen, können Sie die methode von Sitzung.Save () nur aufrufen.
[Anmerkung]: Der Cache der ersten Ebene (standardmäßig existiert standardmäßig) in Hibernate wird auch als Sitzungs-Cache bezeichnet und nicht zur Verbesserung der Leistung verwendet, sondern um Transaktionen zu verarbeiten. Der Cache der zweiten Ebene ist ein SessionFactory-Cache, der für alle Sitzungen gültig ist, und sein Lebenszyklus ist der gleiche wie der SessionFactory (der SessionFactory ist ein Singleton und wird beim Start des Projekts erstellt).
Sehen wir uns das folgende Bild an:
【Hinweis】: Wenn der Text des Bildes zu klein ist, können Sie das Bild in ein neues Fenster ziehen, um ~ anzuzeigen
Das obige ist die Abfragestrategie von Hibernate. Betrachten wir weiterhin die Konfiguration des sekundären Cache.
3. Hibernate 4.3 Level 2 Cache Advanced Configuration
Wie oben erwähnt, können wir nach dem Konfigurieren von zwei Elementen in hibernate.cfg.xml den Cache 2 -Cache verwenden, der eine Standardkonfiguration vorliegt. Schauen wir uns zuerst diese Standardkonfiguration an:
<ehcache xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: nonameSpaceSchemalocation = "../ config/Ehcache.xsd"> <!-Wenn der Cache-Speicherüberlauf, wird es bis zum Schleifstock-> <diskstors-- path = "java.io.tmpdir"/> <defaultCache maxelementSinMemory = "10000": <!-Die maximale Anzahl von Objekten, die durch den Speicher unterstützt werden-> ewig = "false": <!!-Ob das Objekt dauerhaft gültig ist, es wird empfohlen, falsch zu sein, so dass die folgenden zwei Parameter gültig sind. Die Einheit ist Sekunden. Das heißt, wenn niemand dieses Objekt nach 60 Sekunden verwendet, wird es im Voraus zerstört-> TimetoliveSeconds = "120": <!-Der Lebenszyklus des Objekts beträgt Sekunden-> Überlauf. MEMETTESTOREEVICTICTPOLICY = "LRU": <!-Objekt Ersatzrichtlinie-> /> < /ehcache>
Die relevante Erklärung zur Standardkonfiguration befindet sich bereits in den obigen Kommentaren. Wir wissen jetzt, dass dies genau an dieser Standardkonfiguration der Hibernate 4.3-Cache der zweiten Ebene der Hibernate 4.3 korrekt ausgeführt werden kann. Wenn wir nun den Cache selbst konfigurieren möchten, müssen wir im SRC -Verzeichnis eine neue EHCache.xml -Datei erstellen und dann die oben genannten Konfigurationselemente neu konfigurieren. Als nächstes müssen wir jede Konfiguration testen. Vor dem Testen werde ich die auf der Homepage angezeigte Situation veröffentlichen und eine Nummer erstellen. Lassen Sie es uns später beim Testen erklären:
Das obige ist Teil des auf der Startseite angezeigten Inhalts. Hibernate hat die Anzeigeinformationen aus der Datenbank gefunden und wurde angezeigt. Wir werden sie zählen und es wird einfacher zu analysieren, wenn wir den Cache später testen. Beginnen wir mit dem Testen der oben genannten Cache -Konfigurationselemente:
Test 1: Testen Sie die Anzahl der Objekte im Speicher. Ändern Sie die Konfiguration in die folgende Situation:
<defaultCache maxelementsInmemory = "6" <!-Seting unterstützt nur 6 Caches-> Eternal = "True" Overflowtodisk = "False" majorStoreEvictionPolicy = "FIFO": <!-Erstes, First-Out-> />
Nach Abschluss der Konfiguration starten wir den Server neu und öffnen die Startseite. Da 6 konfiguriert sind, werden nur die letzten 6 im Cache enthaltenen Datensätze gespeichert, dh Nummer 3-8. Wir klicken auf eines der Produkte in 3-8, um die Seite Produktdetails einzugeben. Beachten Sie, dass die Konsole im Hintergrund keine Abfrageinformationen ausgibt, was bedeutet, dass keine SQL -Anweisung gesendet wird. Wenn wir jedoch auf die Produktnummer 2 klicken, wird eine SQL -Anweisung im Hintergrund gesendet, dh die Datenbank wird abfragt. Wir haben das Produkt 2 zurückgegriffen und erneut geklickt, und es wird keine SQL -Anweisung gesendet, was bedeutet, dass es in den Cache gesteckt wurde, der Cache jedoch nur 6 Daten unterstützt. Da die konfigurierte Strategie für Objekteersatze zuerst an erster Stelle steht, wurde die Nummer 3 im Cache gerade entfernt. Wir haben 3 geklickt, um zu versuchen, eine SQL -Anweisung zu senden. Der Test ist also abgeschlossen und die Cache -Ausführung der zweiten Ebene ist normal.
Test 2: Der Lebenszyklus des Testobjekts. Ändern Sie die Konfiguration in die folgende Situation:
<defaultCache maxelementsInmemory = "100" eternal = "false" <!-Nur durch Übereinstimmung mit falsch kann der folgende Lebenszyklus festgelegt werden-> TimetoidleSeconds = "20" TimetoliveSeconds = "40" Überlauf.
Die Cache -Zeit ist als 40 Sekunden konfiguriert, und wenn es in 20 Sekunden keinen Betrieb gibt, wird sie entfernt. Da wir 100 Datensätze zugewiesen haben, befinden sich die oben genannten Zahlen 1-8 im Cache. Nachdem wir den Server aktiviert haben, klicken wir auf eine, die beispielsweise auf Nummer 8 klicken und keine SQL -Anweisung ausgestellt wird. Klicken Sie normalerweise nach 20 Sekunden auf Nummer 8 und senden Sie eine SQL -Anweisung, um anzuzeigen, dass der von uns konfigurierte Lebenszyklus wirkt. Beachten Sie hier, dass die Konfiguration nicht zu kurz sein kann, z. B. 10 Sekunden, da Tomcat mehrere Sekunden dauert, bis es startet. Wenn weniger Konfiguration vorliegt, ist die Zeit möglicherweise vor dem Testen abgelaufen ... dann funktioniert es nicht.
Test 3: Testen Sie, ob der sekundäre Cache den Festplattenspeicher unterstützt.
<defaultCache maxelementSinMemory = "4" eternal = "false" <!-Nur durch das Festlegen von Falsch kann der folgende Lebenszyklus festgelegt werden-> Timetoidleseconds = "100" TimetoliveSeconds = "200" Overflowtodisk = "True" <!
Wir setzen den Support -Festplattenspeicher auf true und konfigurieren die maximale Speicherkapazität des sekundären Cache auf 4. Starten Sie den Server neu. Da der sekundäre Cache bis zu 4 Datensätze speichert, muss er 5-8 nummeriert sein. Wenn Sie auf 5-8 klicken, werden SQL-Anweisungen definitiv nicht gesendet. Wenn wir jedoch auf 1-4 klicken, senden wir keine SQL-Anweisungen, da wir die Unterstützung für den Festplattenspeicher eingerichtet haben, speichert Hibernate die Abfrageergebnisse auf der Festplatte, sodass wir die Daten auch direkt erhalten können, ohne SQL-Anweisungen zu senden.
Test 4: Testen Sie die Ersatzstrategie von Level 2 Cache
<defaultCache <!-- FIFO has been eliminated and will not be used again... LRU: The algorithm that has been accessed at least recently (time policy), the access frequency will be ignored, and the one that has accessed the farthest time will be replaced LFU: The algorithm that has been used most recently (frequency measurement), the order of access will be ignored, and the one that has access frequency will be replaced --> MaxelementSinMemory = "3" eternal = "false" <!
Wie der Name schon sagt, konzentrieren sich LRU und LFU auf die letzte Zugriffszeit bzw. Frequenz. Nehmen wir LFU als Beispiel. Jetzt setzen wir den maximalen Speicher auf 3 Datensätze, dh Nummer 6-8. Jetzt greifen wir dreimal auf Nummer 6 zu, Nummer 7 zweimal, Nummer 8 einmal und werden keine SQL -Anweisungen ausgeben. Wir zugreifen erneut auf Nummer 7 und geben SQL -Anweisungen aus. Jetzt befindet sich Nummer 7 im Cache, Nummer 8 wurde entfernt, da es die geringste Anzahl von Zugriffs hat. Wir können erneut auf Nummer 8 klicken, um sie zu testen, die SQL -Anweisung auszugeben, und der Test ist erfolgreich. Wenn es sich um eine LRU handelt, ist die gerade entfernte Nummer 6 Nummer 6, da Nummer 6 der früheste zugegriffen ist.
Zu diesem Zeitpunkt glaube ich, dass jeder die Verwendung des sekundären Cache beherrscht hat, und der Test des sekundären Cache endet hier. Erstellen wir Konfigurationen für unser Online -Mall -Projekt.
4. Tatsächliche Konfiguration von Online -Einkaufszentren -Projekten
Wir konfigurieren die maximale Anzahl von Datensätzen im sekundären Cache auf 1000 und setzen den Lebenszyklus auf 120 Sekunden und den Intervallzyklus auf 60 Sekunden. Wir unterstützen den Festplattenspeicher und verwenden die LFU -Ersatzstrategie (Frequency Priority). Wenn der Benutzerklick -Rate hoch ist, muss er im sekundären Cache platziert werden.
<ehcache xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" XSI: NonameSpaceSchemalocation = "../ config/Ehcache.xsd"> <!-if cache mermax-Überflüsse, speichern Sie es zu Hard Disk Space-> <diskstore path = "java. <defaultCache maxelementsInmemory = "1000" eternal = "False" TimetoidleSeconds = "60" TimetoliveSeconds = "120" Überlauf.
Nun, in Kombination mit dem Online-Mall-Projekt wird die Konfiguration und Verwendung des zweiten Cache von Hibernate 4.3 von Hibernate 4.3 eingeführt.
Originaladresse: http://blog.csdn.net/eson_15/article/details/51405911
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.