Heim Java javaLernprogramm Detaillierte Erläuterung des Second-Level-Cache in Java

Detaillierte Erläuterung des Second-Level-Cache in Java

May 16, 2017 am 09:59 AM
hibernate 二级缓存

In diesem Artikel wird hauptsächlich der Hibernate-Second-Level-Cache in Java ausführlich erläutert. Jetzt werde ich ihn mit Ihnen teilen und ihn als Referenz verwenden. Folgen wir dem Editor, um einen Blick darauf zu werfen

Hibernate-Cache der zweiten Ebene

1. Ein im Computerbereich sehr verbreitetes Konzept. Es befindet sich zwischen der Anwendung und der permanenten Datenspeicherquelle (z. B. einer Datei oder Datenbank auf der Festplatte). Seine Funktion besteht darin, die Häufigkeit zu verringern, mit der die Anwendung direkt die permanente Datenspeicherquelle liest und schreibt, und so die Ausführung der Anwendung zu verbessern Leistung. Die Daten im Cache sind eine Kopie der Daten in der Datenspeicherquelle. Das physische Medium des Caches ist normalerweise der Speicher

Der Ruhezustand bietet zwei Cache-Ebenen

Die erste Cache-Ebene ist Sitzung
Level-Cache, bei dem es sich um einen transaktionsbezogenen Cache handelt. Diese Cache-Ebene wird vom Ruhezustand verwaltet und erfordert im Allgemeinen keinen Eingriff

Die zweite Cache-Ebene ist der SessionFactory-Level-Cache, bei dem es sich um einen prozessweiten Cache handelt

Der Cache von Hibernate kann in zwei Kategorien unterteilt werden:

Eingebauter Cache: Hibernate wird mitgeliefert und kann nicht deinstalliert werden. Normalerweise speichert Hibernate die Zuordnung Metadaten und vordefinierte SQL-Anweisungen werden im Cache von SessionFactory abgelegt. Die Mapping-Metadaten sind eine Kopie der Daten in der Mapping-Datei, und die vordefinierten SQL-Anweisungen werden von Hibernate basierend auf den Mapping-Metadaten ausgelesen -nur.

Externer Cache (Second-Level-Cache): ein konfigurierbares Cache-Plugin. Standardmäßig aktiviert SessionFactory dieses Cache-Plugin nicht. Die Daten im externen Cache sind eine Kopie von die Datenbankdaten, extern Das physische Medium des Caches kann Speicher oder Festplatte sein


2. Verstehen Sie die gleichzeitige Zugriffsstrategie des Second-Level-Cache

3. Konfigurieren Sie den prozessweiten Second-Level-Cache (Ehcache-Cache konfigurieren)

1 Kopieren Sie ehcache-1.5. 0.jar in das lib-Verzeichnis des aktuellen Projekts

Abhängig von backport-util-con

current
und commons-logging

2 Einschalten der Second-Level-Cache

3 zum Angeben des Cache-Anbieters

<property name="hibernate.cache.use_second_level_cache">true</property>
Nach dem Login kopieren
4 Geben Sie die Klasse an, die den Second-Level-Cache verwendet

 <property name="hibernate.cache.provider_class">
    org.hibernate.cache.EhCacheProvider</property>
Nach dem Login kopieren
Methode eins ist: Verwenden Sie die *.hbm.xml-Konfiguration der Klasse


Wählen Sie die Persistenzklasse aus, die den Cache der zweiten Ebene verwenden muss, und legen Sie die Richtlinie für den gleichzeitigen Zugriff ihres Caches der zweiten Ebene fest -Element des -Elements gibt an, dass Hibernate das einfache

-Attribut des
Objekts

zwischenspeichert, die festgelegten Attribute jedoch nicht zwischengespeichert werden Für die Set-Attribute müssen Sie das Unterelement zum Element <set> hinzufügen. Konfigurieren Sie es in der Datei hibernate.cfg.xml )

5 Konfigurieren Sie die standardmäßige

Konfigurationsdatei von ehcache

ehcache.xml (fester Name) (legen Sie es in den Klassenpfad)
  <!-- 指定使用二级缓存的类 放在maping下面 -->
  <!-- 配置类级别的二级缓存 -->
  <class-cache class="com.sihai.c3p0.Customer" usage="read-write"/>
  <class-cache class="com.sihai.c3p0.Order" usage="read-write"/>
 
  <!-- 配置集合级别的二级缓存 -->
  <collection-cache collection="com.sihai.c3p0.Customer.orders" 
         usage="read-write"/>
Nach dem Login kopieren

4 . Test

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd"> 
 
 <diskStore path="c:/ehcache"/> 
 <defaultCache 
   maxElementsInMemory="5" 
   eternal="false" 
   timeToIdleSeconds="120" 
   timeToLiveSeconds="120" 
   overflowToDisk="true" 
   maxElementsOnDisk="10000000" 
   diskPersistent="false" 
   diskExpiryThreadIntervalSeconds="120" 
   memoryStoreEvictionPolicy="LRU" 
   /> 
</ehcache>
Nach dem Login kopieren

[Verwandte Empfehlungen]

1.
package com.sihai.hibernate3.test; 
 
import java.util.Iterator; 
import java.util.List; 
 
import org.hibernate.Query; 
import org.hibernate.Session; 
import org.hibernate.Transaction; 
import org.junit.Test; 
 
import com.sihai.hibernate3.demo1.Customer; 
import com.sihai.hibernate3.demo1.Order; 
import com.sihai.utils.HibernateUtils; 
 
public class HibernateTest6 { 
  
 @Test 
 // 查询缓存的测试 
 public void demo9(){ 
  Session session = HibernateUtils.getCurrentSession(); 
  Transaction tx = session.beginTransaction(); 
   
  Query query = session.createQuery("select c.cname from Customer c"); 
  // 使用查询缓存: 
  query.setCacheable(true); 
  query.list(); 
   
  tx.commit(); 
   
  session = HibernateUtils.getCurrentSession(); 
  tx = session.beginTransaction(); 
   
  query = session.createQuery("select c.cname from Customer c"); 
  query.setCacheable(true); 
  query.list(); 
   
  tx.commit(); 
 } 
  
 @SuppressWarnings("unused") 
 @Test 
 // 更新时间戳 
 public void demo8(){ 
  Session session = HibernateUtils.getCurrentSession(); 
  Transaction tx = session.beginTransaction(); 
   
  Customer customer = (Customer) session.get(Customer.class, 2); 
  session.createQuery("update Customer set cname = &#39;奶茶&#39; where cid = 2").executeUpdate(); 
   
  tx.commit(); 
   
  session = HibernateUtils.getCurrentSession(); 
  tx = session.beginTransaction(); 
   
  Customer customer2 = (Customer) session.get(Customer.class, 2); 
   
  tx.commit(); 
 } 
  
 @SuppressWarnings("all") 
 @Test 
 // 将内存中的数据写到硬盘 
 public void demo7(){ 
  Session session = HibernateUtils.getCurrentSession(); 
  Transaction tx = session.beginTransaction(); 
   
  List<Order> list = session.createQuery("from Order").list(); 
   
  tx.commit(); 
 } 
  
 @Test 
 // 一级缓存的更新会同步到二级缓存: 
 public void demo6(){ 
  Session session = HibernateUtils.getCurrentSession(); 
  Transaction tx = session.beginTransaction(); 
   
  Customer customer = (Customer) session.get(Customer.class, 1); 
  customer.setCname("芙蓉"); 
   
  tx.commit(); 
   
  session = HibernateUtils.getCurrentSession(); 
  tx = session.beginTransaction(); 
   
  Customer customer2 = (Customer) session.get(Customer.class, 1); 
   
  tx.commit(); 
 } 
  
 @SuppressWarnings("unchecked") 
 @Test 
 // iterate()方法可以查询所有信息. 
 // iterate方法会发送N+1条SQL查询.但是会使用二级缓存的数据 
 public void demo5(){ 
  Session session = HibernateUtils.getCurrentSession(); 
  Transaction tx = session.beginTransaction(); 
   
  // N+1条SQL去查询. 
  Iterator<Customer> iterator = session.createQuery("from Customer").iterate(); 
  while(iterator.hasNext()){ 
   Customer customer = iterator.next(); 
   System.out.println(customer); 
  } 
   
  tx.commit(); 
   
  session = HibernateUtils.getCurrentSession(); 
  tx = session.beginTransaction(); 
   
  iterator = session.createQuery("from Customer").iterate(); 
  while(iterator.hasNext()){ 
   Customer customer = iterator.next(); 
   System.out.println(customer); 
  } 
   
  tx.commit(); 
 } 
  
 @SuppressWarnings("unchecked") 
 @Test 
 // 查询所有.Query接口的list()方法. 
 // list()方法会向二级缓存中放数据,但是不会使用二级缓存中的数据. 
 public void demo4(){ 
  Session session = HibernateUtils.getCurrentSession(); 
  Transaction tx = session.beginTransaction(); 
   
  // 查询所有客户: 
  // list方法会向二级缓存中放入数据的. 
  List<Customer> list = session.createQuery("from Customer").list(); 
  for (Customer customer : list) { 
   System.out.println(customer.getCname()); 
  } 
  tx.commit(); 
   
  session = HibernateUtils.getCurrentSession(); 
  tx = session.beginTransaction(); 
   
  // Customer customer = (Customer) session.get(Customer.class, 1);// 没有发生SQL ,从二级缓存获取的数据. 
  // list()方法没有使用二级缓存的数据. 
  list = session.createQuery("from Customer").list(); 
  for (Customer customer : list) { 
   System.out.println(customer.getCname()); 
  } 
   
  tx.commit(); 
 } 
  
 @Test 
 // 二级缓存的集合缓冲区特点: 
 public void demo3(){ 
  Session session = HibernateUtils.getCurrentSession(); 
  Transaction tx = session.beginTransaction(); 
   
  Customer customer = (Customer) session.get(Customer.class, 1); 
  // 查询客户的订单. 
  System.out.println("订单的数量:"+customer.getOrders().size()); 
   
  tx.commit(); 
   
  session = HibernateUtils.getCurrentSession(); 
  tx = session.beginTransaction(); 
   
  Customer customer2 = (Customer) session.get(Customer.class, 1); 
  // 查询客户的订单. 
  System.out.println("订单的数量:"+customer2.getOrders().size()); 
   
  tx.commit(); 
 } 
  
 @SuppressWarnings("unused") 
 @Test 
 // 配置二级缓存的情况 
 public void demo2(){ 
  Session session = HibernateUtils.getCurrentSession(); 
  Transaction tx = session.beginTransaction(); 
   
  Customer customer1 = (Customer) session.get(Customer.class, 1);// 发送SQL. 
   
  Customer customer2 = (Customer) session.get(Customer.class, 1);// 不发送SQL. 
   
  System.out.println(customer1 == customer2); 
   
  tx.commit(); 
   
  session = HibernateUtils.getCurrentSession(); 
  tx = session.beginTransaction(); 
   
  Customer customer3 = (Customer) session.get(Customer.class, 1);// 不发送SQL. 
  Customer customer4 = (Customer) session.get(Customer.class, 1);// 不发送SQL. 
   
  System.out.println(customer3 == customer4); 
   
  tx.commit(); 
 } 
  
  
 @SuppressWarnings("unused") 
 @Test 
 // 没有配置二级缓存的情况 
 public void demo1(){ 
  Session session = HibernateUtils.getCurrentSession(); 
  Transaction tx = session.beginTransaction(); 
   
  Customer customer1 = (Customer) session.get(Customer.class, 1);// 发送SQL. 
   
  Customer customer2 = (Customer) session.get(Customer.class, 1);// 不发送SQL. 
   
   
   
  tx.commit(); 
   
  session = HibernateUtils.getCurrentSession(); 
  tx = session.beginTransaction(); 
   
  Customer customer3 = (Customer) session.get(Customer.class, 1);// 发送SQL. 
   
   
  tx.commit(); 
 } 
}
Nach dem Login kopieren

Besondere Empfehlung

: „php Programmer Toolbox“ V0 .1 Version herunterladen 2. Java Kostenloses Video-Tutorial

3. JAVA-Tutorial-Handbuch

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Second-Level-Cache in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was sind der First-Level-Cache und der Second-Level-Cache von Mybatis? Was sind der First-Level-Cache und der Second-Level-Cache von Mybatis? Jan 15, 2024 pm 01:44 PM

Der Cache der ersten Ebene von mybatis ist standardmäßig aktiviert und befindet sich auf der SqlSession-Ebene. Dies bedeutet, dass mehrere Abfragen in derselben SqlSession diese Caching-Ebene nutzen. Der Cache der ersten Ebene speichert hauptsächlich Abfrageergebnisse. Beim Ausführen einer Abfrageoperation speichert MyBatis die Zuordnungsbeziehung zwischen der Zuordnungsanweisung und dem Abfrageergebnis sowie die Abfrageergebnisdaten im Cache. Der Cache der zweiten Ebene von mybatis unterscheidet sich vom Cache der ersten Ebene. Der Cache der zweiten Ebene wird in der gesamten Anwendung gemeinsam genutzt, im Gegensatz zum Cache der ersten Ebene in jeder SqlSession usw.

Analysieren Sie den Caching-Mechanismus von MyBatis: Vergleichen Sie die Eigenschaften und die Verwendung des Caches der ersten Ebene und des Caches der zweiten Ebene Analysieren Sie den Caching-Mechanismus von MyBatis: Vergleichen Sie die Eigenschaften und die Verwendung des Caches der ersten Ebene und des Caches der zweiten Ebene Feb 25, 2024 pm 12:30 PM

Analyse des MyBatis-Caching-Mechanismus: Der Unterschied und die Anwendung von First-Level-Cache und Second-Level-Cache Im MyBatis-Framework ist Caching eine sehr wichtige Funktion, die die Leistung von Datenbankoperationen effektiv verbessern kann. Unter diesen sind der First-Level-Cache und der Second-Level-Cache zwei häufig verwendete Caching-Mechanismen in MyBatis. In diesem Artikel werden die Unterschiede und Anwendungen von First-Level-Cache und Second-Level-Cache im Detail analysiert und spezifische Codebeispiele zur Veranschaulichung bereitgestellt. 1. Level-1-Cache Der Level-1-Cache wird auch als lokaler Cache bezeichnet. Er ist standardmäßig aktiviert und kann nicht deaktiviert werden. Der Cache der ersten Ebene ist SqlSes

So integrieren Sie Hibernate in ein SpringBoot-Projekt So integrieren Sie Hibernate in ein SpringBoot-Projekt May 18, 2023 am 09:49 AM

Hibernate in das SpringBoot-Projekt integrieren Vorwort Hibernate ist ein beliebtes ORM-Framework (Object Relational Mapping), das Java-Objekte Datenbanktabellen zuordnen kann, um Persistenzvorgänge zu erleichtern. Im SpringBoot-Projekt kann uns die Integration von Hibernate dabei helfen, Datenbankoperationen einfacher durchzuführen. In diesem Artikel wird die Integration von Hibernate in das SpringBoot-Projekt vorgestellt und entsprechende Beispiele bereitgestellt. 1.Abhängigkeiten einführenFügen Sie die folgenden Abhängigkeiten in die Datei pom.xml ein: org.springframework.bootspring-boot-starter-data-jpam

Java-Fehler: Ruhezustandsfehler, wie man damit umgeht und sie vermeidet Java-Fehler: Ruhezustandsfehler, wie man damit umgeht und sie vermeidet Jun 25, 2023 am 09:09 AM

Java ist eine objektorientierte Programmiersprache, die im Bereich der Softwareentwicklung weit verbreitet ist. Hibernate ist ein beliebtes Java-Persistenz-Framework, das eine einfache und effiziente Möglichkeit bietet, die Persistenz von Java-Objekten zu verwalten. Während des Entwicklungsprozesses treten jedoch häufig Hibernate-Fehler auf, die dazu führen können, dass das Programm abnormal beendet wird oder instabil wird. Der Umgang mit und die Vermeidung von Hibernate-Fehlern ist zu einer Fähigkeit geworden, die Java-Entwickler beherrschen müssen. In diesem Artikel werden einige gängige Hib vorgestellt

Was sind die Unterschiede zwischen Hibernate und Mybatis? Was sind die Unterschiede zwischen Hibernate und Mybatis? Jan 03, 2024 pm 03:35 PM

Die Unterschiede zwischen Hibernate und Mybatis: 1. Implementierungsmethode; 3. Vergleich der Objektverwaltung; Detaillierte Einführung: 1. Implementierungsmethode: Hibernate ist eine vollständige Objekt-/Relational-Mapping-Lösung, die Objekte Datenbanktabellen zuordnet, während MyBatis von Entwicklern das manuelle Schreiben von SQL-Anweisungen und ResultMap erfordert. 2. Leistung: Hibernate ist in Bezug auf die Entwicklungsgeschwindigkeit schneller MyBatis, weil Hibernate die DAO-Ebene usw. vereinfacht.

Was ist die Zuordnungsmethode für Eins-zu-Viele- und Viele-zu-Viele-Beziehungen in Java Hibernate? Was ist die Zuordnungsmethode für Eins-zu-Viele- und Viele-zu-Viele-Beziehungen in Java Hibernate? May 27, 2023 pm 05:06 PM

Hibernate ist ein hervorragendes ORM-Framework, das den Datenzugriff zwischen Java-Anwendungen und relationalen Datenbanken vereinfacht. In Hibernate können wir Eins-zu-Viele- und Viele-zu-Viele-Beziehungen verwenden, um komplexe Datenmodelle zu verarbeiten. Die Eins-zu-Viele-Beziehung von Hibernate In Hibernate bedeutet eine Eins-zu-Viele-Beziehung, dass eine Entitätsklasse mehreren anderen Entitätsklassen entspricht. Beispielsweise kann eine Bestellung mehreren Bestellpositionen (OrderItem) entsprechen, und ein Benutzer (User) kann mehreren Bestellungen (Order) entsprechen. Um eine Eins-zu-Viele-Beziehung in Hibernate zu implementieren, müssen Sie in der zu speichernden Entitätsklasse ein Sammlungsattribut definieren

So konfigurieren Sie den Second-Level-Cache von Mybatis So konfigurieren Sie den Second-Level-Cache von Mybatis Jan 11, 2024 pm 01:34 PM

Die Schritte für die Konfiguration des sekundären Caches von mybatis: 1. Aktivieren Sie den sekundären Cache. 3. Geben Sie den Parallelitätsgrad des Caches an. 5. Leeren Sie den sekundären Cache. MyBatis bietet eine Second-Level-Cache-Funktion zur Verbesserung der Abfrageleistung. Der Second-Level-Cache ist ein Cache, der mehrere SQL-Sitzungen umfasst. Er kann die Anzahl der Zugriffe auf die Datenbank reduzieren und die Anwendungsleistung verbessern. Wenn Sie den Cache der zweiten Ebene verwenden, müssen Sie auf Thread-Sicherheitsprobleme achten, um sicherzustellen, dass nicht mehrere Threads gleichzeitig dieselben Daten ändern.

Cache der zweiten Ebene in der Java-Caching-Technologie Cache der zweiten Ebene in der Java-Caching-Technologie Jun 20, 2023 pm 12:51 PM

Mit der Popularisierung des Internets und der Beschleunigung des Informatisierungsprozesses ist die Datenmenge explosionsartig gewachsen, wodurch die Probleme, auf die wir während des Entwicklungsprozesses stoßen, immer komplexer werden. Das Aufkommen der Caching-Technologie hat sich zu einer sehr guten Lösung entwickelt und kann die Leistung und Zuverlässigkeit des Systems verbessern. Unter diesen Technologien ist der Second-Level-Cache direkt an der Anwendung beteiligt und bietet uns viel praktischen Wert. In diesem Artikel wird der Second-Level-Cache in der Java-Cache-Technologie vorgestellt. 1. Was ist Caching-Technologie? Die Caching-Technologie ist eine häufig verwendete Methode zur Leistungsoptimierung im Computerbereich.

See all articles