Heim  >  Artikel  >  Java  >  Detaillierte Erläuterung der MyBatis-Codebeispiele zu Cache-Problemen der zweiten Ebene

Detaillierte Erläuterung der MyBatis-Codebeispiele zu Cache-Problemen der zweiten Ebene

黄舟
黄舟Original
2017-03-24 10:34:361716Durchsuche

In diesem Artikel wird hauptsächlich das Problem von MyBatis mit dem Cache der zweiten Ebene vorgestellt. Der Cache der zweiten Ebene ist ein Cache mit mehreren SQL-Anweisungen, der denselben Mapper betreibt Cache der zweiten Ebene Es kann gemeinsam genutzt werden. MyBatis bietet Cache der ersten Ebene und Cache der zweiten Ebene. Der Cache der ersten Ebene ist ein Cache auf SQL-Sitzungsebene. Die Caches zwischen verschiedenen SQL-Sitzungen beeinflussen sich nicht gegenseitig. Der Cache der zweiten Ebene ist ein Cache der Mapper-Ebene. Mehrere sqlSessions werden auf demselben Mapper ausgeführt, und sein Cache der zweiten Ebene kann gemeinsam genutzt werden.


MyBatis bietet eine Vielzahl von Second-Level-Cache-Lösungen zur Auswahl. Unter anderem ist die Unterstützung für

Memcached

relativ ausgereift. Wir werden nun Memcached als Beispiel nehmen, um die Integration mit dem Spring-Projekt vorzustellen.

Verwenden Sie die Konfiguration

, um pom.

xml

zu konfigurieren und Abhängigkeiten hinzuzufügen.

<dependencies>
 ...
 <dependency>
  <groupId>org.mybatis.caches</groupId>
  <artifactId>mybatis-memcached</artifactId>
  <version>1.0.0</version>
 </dependency>
 ...
</dependencies>
Globaler Schalter

<settings>
  <setting name="cacheEnabled" value="true"/>
</settings>
Konfigurieren Sie die Mapper.xml, die zwischengespeichert werden muss

Der zweite Da der Level-Cache Mapper Level ist, können Sie den Second-Level-Cache für bestimmte Mapper.xml aktivieren. Nachdem

aktiviert wurde, werden alle ausgewählten Anweisungen im Mapper standardmäßig zwischengespeichert. Alle Einfüge-, Aktualisierungs- und Löschanweisungen unter diesem
<mapper namespace="org.acme.FooMapper">
 <cache type="org.mybatis.caches.memcached.MemcachedCache" />
</mapper>
Namespace

führen dazu, dass der Cache im Speicherplatz gespeichert wird zwischengespeichert werden. Cache kann für eine bestimmte Anweisung deaktiviert werden.

kann auch eine Aktualisierungsaktion für eine bestimmte Anweisung auslösen (Standard entspricht allen Anweisungen zum Einfügen,
 <select id="retObj" resultMap="results" useCache="false" >
   select id, name, sex from employee  
 </select>
Aktualisieren

und Löschen).

Konfigurationsparameter werden in memcached.properties festgelegt. Wenn sie fehlen, werden die Standardeinstellungen verwendet.
 <select id="retObj" resultMap="results" flushCache="true" >
   select id, name, sex from employee  
 </select>

Die folgenden Konfigurationsparameter sind:

Wenn Sie Cache-Vorgangsprotokolle aufzeichnen müssen, können Sie dies durch die folgende Konfiguration erreichen

<mapper namespace="org.acme.FooMapper">
 <cache type="org.mybatis.caches.memcached.LoggingMemcachedCache" />
 ...
</mapper>

HinweiseIn Memcached zwischengespeicherte Klassen müssen die Serializable-Schnittstelle implementieren, andernfalls wird der Fehler java.io.NotSerializableAusnahme

wird gemeldet.


L2-Cache-Anwendungsszenarien

Es wird empfohlen, L2-Cache für Daten mit hoher Abfragehäufigkeit und geringer Änderungshäufigkeit zu verwenden.
  1. Für viele Abfrageanfragen und Benutzer, die keine hohen Anforderungen an Echtzeit-Abfrageergebnisse haben, kann die Second-Level-Caching-Technologie von mybatis verwendet werden, um den Datenbankzugriff zu reduzieren und die Zugriffsgeschwindigkeit zu verbessern wie zum Beispiel: Zeitaufwändige statistische Analyse SQL, Telefonrechnungsabfrage SQL usw.
  2. Die Implementierungsmethode ist wie folgt:

Durch das Festlegen des Aktualisierungsintervalls löscht mybatis den Cache automatisch in bestimmten Abständen Datenänderungen Frequenzeinstellung Cache-Aktualisierungsintervall FlushInterval kann beispielsweise je nach Bedarf auf 30 Minuten, 60 Minuten, 24 Stunden usw. eingestellt werden.

Mybatis-Einschränkungen

Der Mybatis-Cache der zweiten Ebene implementiert feinkörniges Caching auf Datenebene nicht gut.

Zum Beispiel die folgenden Anforderungen: Zwischenspeicherung von Produktinformationen. Da der Zugriff auf Produktinformationen umfangreich ist, müssen Benutzer zu diesem Zeitpunkt jedes Mal die neuesten Produktinformationen abfragen, wenn Sie die zweite Version verwenden -Level-Cache von mybatis Es ist unmöglich zu erreichen, dass bei einer Produktänderung nur die Cache-Informationen des Produkts aktualisiert werden, ohne die Informationen
anderer

Produkte zu aktualisieren, da der Cache-Bereich der zweiten Ebene von ​​mybaits ist in Mapper unterteilt. Wenn sich die Informationen eines Produkts ändern, werden alle

Cache-Daten der Nachricht aktualisiert. Die Lösung solcher Probleme erfordert eine gezielte Zwischenspeicherung von Daten basierend auf den Anforderungen auf der Geschäftsebene.

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der MyBatis-Codebeispiele zu Cache-Problemen der zweiten Ebene. 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