Heim  >  Artikel  >  Java  >  Tutorial zur Verwendung des XML-Mapping-Cache im MyBatis-Framework von Java

Tutorial zur Verwendung des XML-Mapping-Cache im MyBatis-Framework von Java

高洛峰
高洛峰Original
2017-01-23 11:41:261253Durchsuche

MyBatis verfügt über eine sehr leistungsstarke Abfrage-Caching-Funktion, die sehr einfach konfiguriert und angepasst werden kann. Standardmäßig ist Caching nicht aktiviert, um sekundäres Caching zu aktivieren, müssen Sie Ihrer SQL-Zuordnungsdatei eine Zeile hinzufügen:

<cache/>

Das ist es im wahrsten Sinne des Wortes. Die Wirkung dieser einfachen Aussage ist wie folgt:
1. Alle SELECT-Anweisungen in der Mapping-Anweisungsdatei werden zwischengespeichert.
2. Alle Anweisungen zum Einfügen, Aktualisieren und Löschen in der Mapping-Anweisungsdatei aktualisieren den Cache.
3. Der Cache verwendet zur Wiederherstellung den Least-Recent-Used-Algorithmus (LRU, am wenigsten kürzlich verwendet).
4. Gemäß dem Zeitplan (z. B. kein Flush-Intervall, kein Aktualisierungsintervall) wird der Cache zu keiner Zeit aktualisiert.
5. Der Cache speichert 1024 Verweise auf die Listensammlung oder das Objekt (unabhängig davon, was die Abfragemethode zurückgibt).
6. Der Cache wird als Lese-/Schreibcache betrachtet, was bedeutet, dass der Objektabruf nicht gemeinsam genutzt wird und vom Aufrufer sicher geändert werden kann, ohne mögliche Änderungen anderer Aufrufer oder Threads zu beeinträchtigen.

Alle diese Eigenschaften können über die Eigenschaften des Cache-Elements geändert werden. Zum Beispiel:

<cache
 eviction="FIFO"
 flushInterval="60000"
 size="512"
 readOnly="true"/>

Diese erweiterte Konfiguration erstellt einen FIFO-Cache, der alle 60 Sekunden geleert wird und 512 Verweise auf das Ergebnisobjekt oder die Ergebnisliste speichert. Das zurückgegebene Objekt gilt als schreibgeschützt und wird daher zwischen Aufrufern in verschiedenen Threads geändert. Dies kann zu Konflikten führen.
Verfügbare Räumungsstrategien (Räumung) sind:

LRU – Least Recent Used: Entfernen Sie Objekte, die am längsten nicht verwendet wurden.

FIFO – First in, first out: Objekte in der Reihenfolge entfernen, in der sie in den Cache gelangen.

SOFT – Soft-Referenz: Entfernt Objekte basierend auf dem Garbage-Collector-Status und Soft-Referenzregeln.

SCHWACH – Schwache Referenzen: Entfernen Sie Objekte aggressiver basierend auf dem Garbage-Collector-Status und schwachen Referenzregeln.

Der Standardwert ist LRU.

„flushInterval“ kann auf eine beliebige positive Ganzzahl gesetzt werden und stellt einen angemessenen Zeitraum in Millisekunden dar. Der Standardwert ist nicht festgelegt, dh es gibt kein Aktualisierungsintervall und der Cache wird nur aktualisiert, wenn die Anweisung aufgerufen wird.
size (Anzahl der Referenzen) kann auf eine beliebige positive Ganzzahl festgelegt werden. Berücksichtigen Sie dabei die Anzahl der zwischengespeicherten Objekte und die Menge der in Ihrer Umgebung verfügbaren Speicherressourcen. Der Standardwert ist 1024.
Die readOnly-Eigenschaft kann auf true oder false gesetzt werden. Ein schreibgeschützter Cache gibt an alle Aufrufer dieselbe Instanz des zwischengespeicherten Objekts zurück. Daher können diese Objekte nicht geändert werden. Dies bietet wichtige Leistungsvorteile. Ein Lese-/Schreibcache gibt eine Kopie des zwischengespeicherten Objekts zurück (über Serialisierung). Dies ist langsamer, aber sicherer und wird daher standardmäßig auf „false“ gesetzt.

Benutzerdefiniertes Caching verwenden
Zusätzlich zu diesen Möglichkeiten zum Anpassen des Cachings können Sie das Caching-Verhalten auch vollständig außer Kraft setzen, indem Sie Ihren eigenen Cache implementieren oder Adapter für andere Caching-Lösungen von Drittanbietern erstellen.

<cache type=”com.domain.something.MyCustomCache”/>

Dieses Beispiel zeigt, wie eine benutzerdefinierte Cache-Implementierung verwendet wird. Die durch das Typattribut angegebene Klasse muss die Schnittstelle org.mybatis.cache.Cache implementieren. Diese Schnittstelle ist eine der vielen komplexen Schnittstellen im MyBatis-Framework, aber geben Sie ihr einfach, was sie tut.

public interface Cache {
 String getId();
 int getSize();
 void putObject(Object key, Object value);
 Object getObject(Object key);
 boolean hasKey(Object key);
 Object removeObject(Object key);
 void clear();
 ReadWriteLock getReadWriteLock();
}

Referenzcache
Vielleicht möchten Sie irgendwann in der Zukunft dieselbe Cache-Konfiguration und dieselben Instanzen über alle Namespaces hinweg gemeinsam nutzen. In diesem Fall können Sie das Cache-Ref-Element verwenden, um auf einen anderen Cache zu verweisen.​

<cache-ref namespace=”com.someone.application.data.SomeMapper”/>

Weitere Tutorials zur Verwendung des XML-Mapping-Caches im MyBatis-Framework von Java finden Sie auf der chinesischen PHP-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