Heim  >  Artikel  >  Java  >  Einführung in den Caching-Mechanismus im Ruhezustand

Einführung in den Caching-Mechanismus im Ruhezustand

巴扎黑
巴扎黑Original
2017-07-17 17:52:491808Durchsuche

Hibernate-Cache der ersten Ebene

1. Der Hibernate-Cache der ersten Ebene wird auch „Sitzungs-Cache“ und „Sitzungs-Cache“ genannt.

2. Wenn Sie eine Entität aus der Datenbank über Session abfragen, wird die Entität im Speicher gespeichert. Wenn Sie dieselbe Entität das nächste Mal abfragen, wird sie nicht mehr aus der Datenbank, sondern aus dem Speicher abgerufen . Das ist Caching

3. Der Lebenszyklus des First-Level-Cache ist derselbe wie der der Sitzung.

4. Der anwendbare Datenbereich im Cache der ersten Ebene liegt innerhalb der aktuellen Sitzung.

Warum (Warum Hibernate-Cache verwenden?)

Hibernate ist ein Persistenzschicht-Framework, das häufig auf physische Datenbanken zugreift.

Um die Häufigkeit des Anwendungszugriffs auf physische Datenquellen zu reduzieren und dadurch die Anwendungsleistung zu verbessern.

Die Daten im Cache sind eine Kopie der Daten in der physischen Datenquelle. Die Anwendung liest und schreibt zur Laufzeit Daten aus dem Cache Datenquelle wird synchronisiert


Was (Was ist das Prinzip des Hibernate-Cache?) Der Hibernate-Cache umfasst zwei Kategorien: Hibernate-Cache der ersten Ebene und Hibernate-Cache der zweiten Ebene.

1.Der Cache der ersten Ebene im Ruhezustand wird auch „Sitzungscache“ genannt.

Die integrierte Sitzung kann nicht entladen werden, und der Sitzungscache ist ein transaktionsweiter Cache (der Lebenszyklus des Sitzungsobjekts entspricht normalerweise einer Datenbanktransaktion oder einer Anwendungstransaktion).

Im Cache der ersten Ebene hat jede Instanz einer persistenten Klasse eine eindeutige OID.


2.Der Hibernate-Cache der zweiten Ebene wird auch „SessionFactory-Cache“ genannt.

Da der Lebenszyklus des SessionFactory-Objekts dem gesamten Prozess der Anwendung entspricht, handelt es sich beim Hibernate-Cache der zweiten Ebene um einen prozessweiten oder Cluster-weiten Cache. Daher kann es zu Parallelitätsproblemen kommen, sodass ein entsprechender gleichzeitiger Zugriff möglich ist Es muss eine Strategie übernommen werden, die Transaktionsisolationsstufen für zwischengespeicherte Daten vorsieht.

Der Cache der zweiten Ebene ist optional und ein konfigurierbares Plug-in. SessionFactory aktiviert dieses Plug-in standardmäßig nicht.

Hibernate stellt die Schnittstelle org.hibernate.cache.CacheProvider bereit, die als Adapter zwischen dem Cache-Plug-in und Hibernate fungiert.

Welche Art von Daten eignen sich für die Speicherung im Second-Level-Cache?
1) Daten, die selten geändert werden
2) Daten, die nicht sehr wichtig sind, gelegentliche gleichzeitige Daten sind zulässig
3) Daten, auf die nicht gleichzeitig zugegriffen wird
4) Konstante Daten
Daten das ist nicht für die Speicherung im Second-Level-Cache geeignet?
1) Häufig geänderte Daten
2) Der gleichzeitige Zugriff auf Daten wie Finanzdaten ist absolut nicht zulässig.
3) Daten werden mit anderen Anwendungen geteilt.


API zur Verwaltung des First-Level-Cache

1.evict(), wird verwendet, um ein Objekt aus dem Cache der ersten Ebene der Sitzung zu löschen.

2.clear(), wird zum Löschen aller Objekte im Cache der ersten Ebene verwendet.

Qurey.list() und Qurey.iterate()

1.Qurey.list() Abfragedaten , sucht nicht im Cache der ersten Ebene, sendet die SQL-Anweisung direkt an die Datenbank und behält das von der Abfrage zurückgegebene Objekt im Cache.

2.Qurey.iterate() sucht nicht aus dem Cache der ersten Ebene, sondern sendet SQL direkt an die Datenbank, um die ID abzufragen. Wenn andere Attribute des Objekts verwendet werden müssen, steht das Objekt an erster Stelle Wird im Cache anhand der ID gesucht. Wenn dies nicht der Fall ist, wird eine SQL-Abfrage an die Datenbank gesendet, sodass die Abfrage allein mit dieser Methode ein N+1-Problem verursacht (d. h. das Senden von N+1 Anweisungen zur Abfrage an die Datenbank). (die Informationen von N Objekten)

3. Wenn diese Anforderung besteht: In zwei verschiedenen Sitzungen muss über Qurey.list() auf dasselbe Objekt zugegriffen werden Um das Einrichten eines Second-Level-Cache zu vermeiden, rufen Sie Query.list() in der ersten Sitzung ab und rufen Sie in der zweiten Sitzung

Hibernate Second-Level-Cache ab ( SessionFactory-Cache) direkt durch Qurey.iterate() Iteration

1. Fügen Sie die Konfiguration in hibernate.cfg.xml hinzu

        <!-- 开启二级缓存 --><property name="hibernate.cache.use_second_level_cache">true</property><!-- 二级缓存的提供类 在hibernate4.0版本以后我们都是配置这个属性来指定二级缓存的提供类--><property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property><!-- 二级缓存配置文件的位置 --><property name="hibernate.cache.provider_configuration_file_resource_path">ehcache.xml</property>

2 . Einzelheiten zur Konfiguration von ehcache.xml finden Sie unter

3. Konfigurieren Sie die Entität durch Annotationen und fügen Sie @Cache(usage=CacheConcurrencyStrategy.READ_ONLY) vor der Klasse hinzu

Allgemeine CacheConcurrencyStrategy-Attributwerte sind READ_ONLY (die der Entität entsprechenden Tabellendaten werden nur gelesen und dann zwischengespeichert) und READ-WIRTE (Tabellendaten können gelesen oder aktualisiert werden)

4 Hinweis: Der Cache der zweiten Ebene im Ruhezustand muss das gesamte Objekt sein. Wenn nur einige Attribute des Objekts abgefragt werden, wird das Objekt nicht zwischengespeichert

Cache abfragen (SessionFactory-Level-Cache)

1. Basierend auf dem oben genannten Second-Level-Cache. Konfiguration fortsetzen

2. Konfiguration hinzufügen

  <property name="hibernate.cache.use_query_cache">true</property>
in hibernate.cfg.xml

2. Fügen Sie @Cacheable zur Entitätsanmerkung hinzu

3. Rufen Sie die Methode setCacheable(true) nach der HQL-Anweisung auf

4. sogar die Parameter Die Einstellungen müssen gleich sein, und der Abfragecache ist zu diesem Zeitpunkt gültig

Die drei Zustände des Ruhezustands (transient (transienter Zustand), persistent (persistent). Zustand) und getrennt (Offline))


Das obige ist der detaillierte Inhalt vonEinführung in den Caching-Mechanismus im Ruhezustand. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn