einführen
Wenn Sie MyBatis verwenden, können Sie den Sekundärcache verwenden, um die Abfragegeschwindigkeit zu erhöhen und somit die Benutzererfahrung zu verbessern.
Verwenden Sie Redis, um den sekundären Cache von MyBatis zu erstellen, aber der Speicher ist steuerbar. Wenn ein separater Server für sekundäre Cache> bereitgestellt wird, ist er einfach zu verwalten.
1. Einlegen Sie Redis -Abhängigkeiten in der Datei pom.xml
<Depopenty> <gruppe> org.springFramework.boot </Groupid> <artifactId> Spring-Boot-Starter-Data-redis </artifactid> </abhängig>
2. Konfigurieren Sie Redis in der Konfigurationsdatei application.Properties
## Redis Spring.Redis.Database = 0spring.redis.host = 172.16.3.123spring.redis.port = 6379spring.redis.Password = Spring.redis.pool.ma X-Active = 8spring.redis.pool.max-wait = -1spring.redis.pool.max-idle = 8spring.redis.pool.min-idle = 0spring.redis.timeout = 0
3. Erstellen Sie ein Cache -Paket und erstellen Sie dann zwei Klassen. Ein ApplicationContexTHolder implementiert die ApplicationContextAware -Schnittstelle. Der spezifische Inhalt ist wie folgt
Paket com.ruijie.springbootandRedis.cache; import org.springframework.beans.beansexception; import org.springframework.context.applicationContext; ApplicationContexTHolder implementiert ApplicationContextaware {private static applicationContext applicationContext; @Override public void setApplicationContext (ApplicationContext CTX) löst Beansexception {ApplicationContext = CTX aus; } / ** * Anwendungskontext von überall abrufen * * @return * / public static applicationContext getApplicationContext () {return applicationContext; } / ** * Bean von Klasse erhalten * * @param clazz * @param <t> * @return * / public static <t> T getBean (Klasse <T> clazz) {return applicationContext.getbean (Clazz); } / ** * Bean By Class Name * * @param name * @param <t> * @return * / public static <T> T getBean (String -Name) {return (t) applicationContext.getBean (Name); }}V.
Paket com.ruijie.springbootandRedis.cache; import org.apache.ibatis.cache.cache; import org.slf4j.logger; import org.slf4j.loggerfactory; org.springframework.data.redis.core.redistemplate; import org.springframework.data.redis.core.ValueOperations; import Java.util.concurrent.TimeUnit; importieren java.util.concurent.locks.ReadwitRiteLock; java.util.concurrent.locks.reentranTreadWriteLock; öffentliche Klasse rediscache implementiert cache {private static Final Logger logger = loggerfactory.getLogger (rediscache.class); Private Final ReadWriteLock ReadWriteLock = New ReentranTreadWriteLock (); private endgültige String -ID; // Cache -Instanz -ID private redistemplate redistemplate; private statische endgültige long expire_time_in_minutes = 30; // Redis -Ablaufzeit public rediscache (String -ID) {if (id == null) {werfen Sie neue illegalArgumentException ("Cache -Instanzen erfordern eine ID"); } this.id = id; } @Override public String getId () {return id; } / ** * Abfragenergebnis in redis * * @param key * @param value * / @Override public void putObject (Objektschlüssel, Objektwert) {try {redistemplate redISTemplate = getRedistemplate (); ValueOperations opsforValue = redistemplate.opsforValue (); opsforValue.set (Schlüssel, Wert, expire_time_in_minutes, timeunit.minutes); logger.debug ("Abfrageergebnis zu Redis"); } catch (throwable t) {logger.Error ("Redis fehlgeschlagen", t); }} / ** * Abfragenergebnis von redis * * @param key * @return * / @Override public Object getObject (Objektschlüssel) {try {redistemplate redISTemplate = getRedistemplate (); ValueOperations opsforValue = redistemplate.opsforValue (); logger.debug ("Get zwischengespeicherte Abfrageergebnis von Redis"); System.out.println ("****"+opsforValue.get (Schlüssel) .ToString ()); return opsforValue.get (Schlüssel); } catch (throwable t) {logger.Error ("Redis wird fehlgeschlagen, fehlgeschlagen zu db", t); null zurückkehren; }} / ** * Entfernen Sie das zwischengeweihte Abfrageergebnis aus Redis * * @param key * @return * / @Override @SuppressWarnings ("Deaktiviert". redistemplate.delete (Schlüssel); logger.debug ("Entfernen Sie zwischengeweihter Abfrage aus Redis"); } catch (throwable t) {logger.Error ("Redis entfernt fehlgeschlagen", t); } return null; } / ** * löscht diese Cache -Instanz * / @Override public void clear () {redistemplate redistemplate = getRedistemplate (); redistemplate.execute ((reciscallback) Verbindung -> {connection.flushdb (); return null;}); logger.debug ("Alle zwischengespeicherten Abfragen aus Redis löschen"); } / ** * Diese Methode wird nicht verwendet * * @return * / @Override public int getSize () {return 0; } @Override public ReadWriteLock getReadWriteLock () {return readWriteLock; } private redistemplate getRedistemplate () {if (redistemplate == null) {redistemplate = applicationContexTHolder.getbean ("redistemplate"); } return redistemplate; }}5. Die serialisierbare Schnittstelle sollte in der Entitätsklasse implementiert werden und die Sequenznummer sollte deklariert werden.
Private statische endgültige lange Serialversionuid = -2566441764189220519L;
6. Schalten Sie MyBatis 'Level 2 Cache ein
Konfigurieren Sie in der Konfigurationsdatei pom.xml
mybatis.configuration.cache-fähig = true
Zu Mapper -Schnittstelle hinzufügen
@CacheNameSpace (Implementierung = (com.demo.testdemo.cache.rediscache.class)))
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.