Die Hauptforschung in diesem Artikel betrifft wie folgt über Inhalte im Zusammenhang mit Spring -Cache.
Dieser Artikel wurde basierend auf Google Translation grob geändert. Da ich nicht weiß, was der Originaltext ist, kann dies zu Fehlern und Ungenauigkeiten in der Übersetzung führen, aber die allgemeine Richtung fühlt sich ziemlich gut an, also habe ich es hier ausgelöst und hofft, dass es hilfreich sein wird.
Das Caching war schon immer ein großer Bedarf daran, sowohl die Anwendungsleistung zu verbessern als auch die Arbeitsbelastung zu verringern. Darüber hinaus ist seine Nützlichkeit heute besonders offensichtlich, mit der Tausende von Besuchern auf den Stimmläufern verarbeitet werden können. Ab Version 3.1 bietet Spring eine Cache -Management -API, ähnlich wie bei deklarativem Transaktionsmanagement. Die abstrakte Schnittstelle von Cache, die auf einheitliche Weise verschiedene Cache -Lösungen verwendet, hat den geringsten Einfluss auf den Code.
Spring verwendet Java -Methoden, um zum ersten Mal eine Methode für eine Kombination mit Parametern anzufordern, und speichert Spring den Rückgabewert im Cache. Daher besteht die nächste Anfrage darin, den Wert aus dem Cache direkt zu verwenden, ohne eine mögliche kostspielige Methode aufrufen zu müssen. Alles wird transparent angewendet, ohne die aufgerufene Methode zu beeinflussen.
In diesem Beitrag werden wir Implementierungen von zwei verschiedenen Cache -Speichern aus dem Frühling sehen.
Die Integration von Frühling und Cache ist einfach und transparent. Die Methode, die Cache benötigt, wird durch @cacheable Annotation kommentiert
@Cacheable (value = "Datacache") public reponse getDatas (Long Param1, String Param2) {} Datacache ist der Name des zugehörigen Cache. Wenn diese Methode zum ersten Mal aufgerufen wird, führt und speichert die Methode das Ausführungsergebnis in dem Ergebnis, das mit dem geheimen Schlüssel aus <Parameter 1 und Parameter 2> als Ergebnis herausgegeben wird. Wenn der gleiche Parameter erneut aufgerufen wird, muss diese Methode nicht erneut ausgeführt werden.
Es ist möglich, dass mehr als ein Cache mit unserer Methode verbunden ist
@Cacheable ({"Datacache", "Standard"}) public Repuse getDatas (Long Param1, String Param2) {} In diesem Fall wird jeder Cache überprüft, bevor die Methode ausgeführt wird, und wenn ein Treffer vorliegt, wird der relevante Wert zurückgegeben.
Der Anteil der grundlegenden Algorithmen eines Cache -Managers ist relativ gering. Der Cache kann als Speicherbereich angesehen werden, in dem die gespeicherten Objekte von einem einzigartigen Schlüssel zugeordnet werden. Der Prozess der Objektsuche ist wie folgt:
1. Berechnen Sie den Schlüssel (verwenden Sie die Hash -Methode, um HashCode zu erhalten).
2. Finden Sie Objekte basierend auf dem Schlüsselwert
3. Wenn das Objekt gefunden wird, geben Sie das Ergebnis zurück
4. Wenn es nicht gefunden werden kann, wird der Schlüssel, der dem Objekt tatsächlich zugeordnet ist, berechnet und das Objekt wird am entsprechenden Ort gespeichert.
Spring verwendet einen einfachen Hash, der Schlüssel basierend auf bestandenen Methodenparametern erzeugt.
Die Zielmethode kann nicht einfach unnötige Schlüssel basierend auf Parametern erzeugen, sondern nur einige einfache Fälle werden basierend auf Parametern generiert.
@Cacheable (value = "Datacache") public reponse getDatas (Long Param1, String Param2, Boolean Param3) {}@Cacheable ermöglicht es Entwicklern, die Art und Weise anzugeben, wie die Schlüsselgenerierung von selbst erzeugt wird. Zu diesem Zweck können Sie Spelausdrücke verwenden.
@Cacheable (value = "Datacache", key = "#param2") public reponse getDatas (Long Param1, String Param2, boolean Param3) {} In diesem Fall oben ist der Parameter des zwischengespeicherten Schlüssels nur Parma2
Frühling erlaubt auch verschachtelte Eigenschaften
@Cacheable (value = "Datacache", key =##param22.name ") public reponse getDatas (Long Param1, Data Param2, Boolean Param3) {} Diese Situation ist der Schlüssel, der basierend auf dem Namensattribut von Parma2 berechnet wurde
Es gibt einen Cache, der im verwendeten Fall möglicherweise nicht für den Cache geeignet ist, in einigen Fällen ist jedoch ein Cache erforderlich. Beim zwischengespeicherten Cache wird der Cache basierend auf dem durch den Spel -Expression berechneten wahren oder falschen berechnet, und wenn die Bedingung wahr ist, wird Cache durchgeführt.
@Cacheable (value = "datacache", key = "#param2", condition = "#param22.Length <64") public reponsed getDatas (Long Param1, String param2, boolean param3) {} In diesem Fall wird Cache nur ausgeführt, wenn die Länge des zweiten Parameters weniger als 64 beträgt
Der Cache von Spring kann nicht nur Daten cache, sondern auch einen Cache -Speicher löschen. Dieser Vorgang wird verwendet, um veraltete Daten oder nicht verwendete zwischengespeicherte Daten zu entfernen. Annotation @CACHEEVICT Definiert Methoden zur Durchführung von Cache -Emptiation. Dies sind Auslöser zum Löschen von Daten im Cache.
@Cacheevict (value = "Datacache") public void reloaddata () {}Diese Option ist sehr notwendig und diese Methode wird verwendet, wenn ein zwischengespeicherter Daten gelöscht werden muss.
Um den Cache -Support für ein Frühjahrsprojekt zu aktivieren, müssen wir dem Namespace Cache -Kommentare hinzufügen.
<beans xmlns = "http://www.springframework.org/schema/bean xmlns: context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://www.spingframework.org/schema/beans http://www.springframework http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd http://www.springframework.org/schema/context "> <cache: Annotation-biven/>
Annotation löschen kann Cache deaktivieren oder die Cache -Nutzung in unserer Konfigurationsklasse aktivieren
@Configuration @enableCaching public class AppConfig {} Technische Einschränkungen
Die Parameter der Objektpassmethode müssen über eine eigene Hashcode -Methode verfügen, um den geheimen Schlüssel zu berechnen.
Wenn ein Objekt übergeben und als Parameter zurückgegeben wurde, sollte es serialisierbar sein
Auswahl implementieren
Frühling bietet zwei grundlegende Implementierungen:
Bei der Verwendung müssen Sie nur das entsprechende Cachemanger- und Manager -Unternehmen deklarieren
Concurrenthashmap mit Java
<bean id = "cachemanager"> <span style = "White-Space: PRE"> </span> <Eigenschaft name = "caches"> <span style = "White-Space: PRE"> </span> <set> <span style = "White-Space: Pre"> </span> <Bean Name = "Default"/> <span Style = White-Space: Pre "> </span> </subokt"/> </> <-
Jede Krippe braucht einen Namen, der durch Kommentare erkannt wird. Man kann mehrere simpleCachemanger durch eine Krippe verwalten, und diese Implementierung ist im Grunde unnötig.
EHCache implementieren
Erklärung von Cachemanger
bean id = "cachemanager"> <Eigenschaft name = "
In eHcache.xml befindet sich die Parameterdatei für Anwendungs -Cache:
<EHCache XSI: NonameSpaceSchemalocation = "Ehcache.xsd" updatecheck = "True" Monitoring = "Autodetekt" dynamicconfig = "true" MaxByTesLocalheap = "150m"> <diskst path = "java.io.tmpdir"/> <DefaultCache Eeternal = "MAXElements"/> <"/> < overflowtodisk = "false"/> <cache name = "datacache" eternal = "false" timetoidleseconds = "300" MaxBytesLocalheap = "30m" Timetoliveseconds = "300" Überlauf = "True" diskPersistent = "falsexpirythreadintervalshisk =" 120 "120" 120 "120" 120 "120" 120 "120" "120" "120" "120" "120" "120" "120" "120" "120" "120" "120" "120" "120" "120" "120" "120". memoryStoreEvictionPolicy = "LRU"/> </ehcache>
Mit EHCache können wir verschiedene Cache -Parameter auf sehr einfache Weise definieren
Name: zwischengespeicherter Kennung
MaxByTesLocalheap: Definiert die Anzahl der Bytes, die der Cache für die virtuelle Maschine verwenden kann. Wenn ein CacheManager MaxBytesLocalheap festgelegt wurde, wird die bestimmte Größe des Cache vom CacheManager abgezogen. Andere gemeinsame Cache -Pausen. Der Wert dieser Eigenschaft ist Data <Nummer> k | K | M | M | G | G steht für Kilobytes (K | K), Megabyte (M | M) oder Gigabyte (G | G).
Ewigkeit: Definiert, ob ein Element ewig ist. Wenn dies der Fall ist, wird die Zeitüberschreitung ignoriert und das Projekt wird nie abgelaufen.
TIMETOIDLESECONDS: Dies ist die Anzahl der Sekunden, das Element wurde in der letzten Auslastung hinterlassen. Der Standardwert des LA ist 0, und das Element bleibt noch
TimetoliveSeconds: Dies ist die Anzahl der Sekunden, die das Projekt in Cache gelebt hat
MEMALTESTOREEVICTICTPOLICY -Plünderungspolitik: LRU - SEHR KEICKETE VERWENDET, Selten verwendet FIFO - Erstes, ältestes Element nach Erstellungsdatum.
Diskexpirythreadintervalseconds: Der Zwangsvollstreckungsprozess steuert die Anzahl der Sekunden zwischen zwei Läufen.
Diskpersistent: Ermöglicht die Wiederherstellung von Objekten zwischen zwei Spielen virtueller Maschinen, die auf der Festplatte gespeichert sind.
Überlauf: Bestimmen Sie, ob ein Objekt auf der Festplatte gespeichert werden kann, um das maximale Speicherelement zu erreichen.
Verwenden Sie um eine einfache mathematische Formel: expirationTime = Math.min((creationTime + timeToLive),(mostRecentTime + timeToIdle))
Das obige ist die detaillierte Erklärung des Frühlings -Cache -Code in diesem Artikel. Ich hoffe, dass es für alle hilfreich sein wird. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!