introducir
Al usar MyBatis, puede usar el caché secundario para aumentar la velocidad de consulta y, por lo tanto, mejorar la experiencia del usuario.
Use Redis para hacer el caché secundario de MyBatis, pero la memoria es controlable. Si se implementa un servidor separado para caché secundario>, es fácil de administrar.
1. Introducir dependencias de Redis en el archivo pom.xml
<Spendency> <MoupRoMID> org.springframework.boot </groupid> <artifactid> spring-boot-starter-data-redis </artifactid> </dependence>
2. Configure Redis en el archivo de configuración de la aplicación.
## 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. Cree un paquete de caché y luego cree dos clases, una ApplicationContexTholder implementa la interfaz ApplicationContextAware. El contenido específico es el siguiente
paquete com.ruijie.springbootandredis.cache; import org.springframework.beanss.beansexception; import org.springframework.context.applicationContext; import org.springframework.context.applicationContextAwee; import org.spingFramework.stereotype.component; ApplicationContexTholder implementa ApplicationContextAware {private static applicationContext ApplicationContext; @Override public void setApplicationContext (ApplicationContext CTX) lanza Beansexception {ApplicationContext = ctx; } / ** * Obtener el contexto de aplicación desde todas partes * * @return * / public static ApplicationContext getApplicationContext () {return ApplicationContext; } / ** * Get Bean by Class * * @param Clazz * @param <t> * @return * / public static <t> t getBean (class <t> clazz) {return ApplicationContext.getBean (Clazz); } / ** * Get Bean por nombre de clase * * @param nombre * @param <t> * @return * / public static <t> t getBean (nombre de cadena) {return (t) applicationContext.getBean (name); }}4. Cree la clase Rediscache para implementar la interfaz de caché, el contenido específico es el siguiente:
paquete com.ruijie.springbootandredis.cache; importar org.apache.ibatis.cache.cache; import org.slf4j.logger; importar org.slf4j.loggerFactory; importar org.springframework.data.redis.core.rediscallback; import org.springfring.data.core; org.springframework.data.redis.core.valueOperations; import java.util.concurrent.timeunit; import java.util.concurrent.locks.readwriteLock; import java.util.concurrent.locks.reentRantReadwriteLock; clase pública de clases redisementos Cache {privado Static Logger Final Logger = LoggerFactory.getLogger (redisCache.class); ReadWriteRelock privado final ReadWriteLock = new ReEntantReadWriteLock (); ID de cadena final privada; // ID de instancia de caché Redistemplate Redistemplate; Private estático final Long expire_time_in_minutes = 30; // Tiempo de vencimiento de Redis public Rediscache (ID de cadena) {if (id == NULL) {arrojar nueva IllegalArGumentException ("Las instancias de caché requieren una ID"); } this.id = id; } @Override public String getId () {return id; } / ** * Pon resultado de la consulta a redis * * @param clave * @param valor * / @Override public void putObject (clave de objeto, valor de objeto) {try {redistemplate redistemplate = getredistEmplate (); ValueOperations OpsforValue = redistemplate.opsforValue (); OPSFORVALUE.SET (clave, valor, expire_time_in_minutes, timeunit.minutes); logger.debug ("Pon resultado de la consulta a Redis"); } capt (twitEable t) {logger.error ("redis put fallido", t); }} / ** * Get Cached Consult Result of Redis * * @param Key * @return * / @Override Public Object getObject (clave de objeto) {try {redistemplate redistemplate = getredistEmplate (); ValueOperations OpsforValue = redistemplate.opsforValue (); logger.debug ("Resultado de la consulta en caché de Redis"); System.out.println ("****"+OpsforValue.get (Key) .ToString ()); return opsforValue.get (clave); } catch (showable t) {logger.error ("redis fallarse, fallar en db", t); regresar nulo; }} / ** * El resultado de la consulta en caché de Redis * * @param Key * @return * / @Override @SupplesSwarnings ("sin verificar") Objeto público RemoBject (Key de objeto) {try {redistEmplate redistemplate = getredistEmplate (); redistemplate.delete (clave); logger.debug ("Retire el resultado de la consulta en caché de Redis"); } catch (showable t) {logger.error ("redis eliminado fallido", t); } return null; } / ** * Borra esta instancia de caché * / @Override public void clear () {redistemplate redistemplate = getRedistEmplate (); redistemplate.execute ((rediscallback) Connection -> {Connection.FlushDB (); return null;}); logger.debug ("Borre todo el resultado de la consulta en caché de Redis"); } / ** * Este método no se usa * * @return * / @Override public int getsize () {return 0; } @Override public writeReLock getReadwriteLock () {return readWriteLock; } private redistemplate getRedistEmplate () {if (redistemplate == null) {redistemplate = applicationContexTholder.getBean ("redistemplate"); } return redistemplate; }}5. La interfaz serializable debe implementarse en la clase de entidad y el número de secuencia debe declararse.
Private static final Long SerialVersionUid = -2566441764189220519l;
6. Encienda el caché de nivel 2 de MyBatis
Configurar en el archivo de configuración de pom.xml
mybatis.configuration.cache-habilitado = true
Agregar a la interfaz mapper
@Cachenamespace (implementation = (com.demo.testdemo.cache.rediscache.class))
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.