introduzir
Ao usar o Mybatis, você pode usar o cache secundário para aumentar a velocidade da consulta e, assim, melhorar a experiência do usuário.
Use Redis para tornar o cache secundário da Mybatis, mas a memória é controlável. Se um servidor separado for implantado para cache secundário>, é fácil de gerenciar.
1.Introduzir dependências Redis no arquivo pom.xml
<Depencency> <PuerpId> org.springframework.boot </frugiD> <stifactId> primavera-boot-starter-data-redis </artifactId> </dependency>
2. Configure o Redis no Application.Properties Configuration File
## 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. Crie um pacote de cache e, em seguida, crie duas classes, um ApplicationContextholder implementa a interface ApplicationContexTAWee. O conteúdo específico é o seguinte
pacote com.ruijie.springbootandredis.cache; importar org.springframework.beans.beansception; importar org.springframework.context.applicationContext; importação org.springframework.Context.ApplicationOxtionExtEare; importação; org.springframework.Context.ApplicationOxtion; ApplicationContexTholder implementa ApplicationContextAWe {private estático ApplicationContext ApplicationContext; @Override public void setApplicationContext (ApplicationContext ctx) lança beansexception {ApplicationContext = ctx; } / ** * Obtenha o contexto do aplicativo de todos os lugares * * @return * / public static ApplicationContext getApplicationContext () {return ApplicationContext; } / ** * Obtenha bean por classe * * @param clazz * @param <t> * @return * / public static <t> t getBean (classe <t> clazz) {return ApplicationContext.getBean (clazz); } / ** * Obtenha bean pelo nome da classe * * @param nome * @param <t> * @return * / public static <t> t getBean (nome da string) {return (t) ApplicationContext.getBean (nome); }}4. Crie a classe Rediscache para implementar a interface de cache, o conteúdo específico é o seguinte:
pacote com.ruijie.springbootandredis.cache; importar org.apache.ibatis.cache.cache; importar org.slf4j.logger; importar org.slf4j.loggerFactory; importação org.springframework.data.redis.core.rediscallback; org.springframework.data.redis.core.redistemplate; importar org.springframework.data.redis.core.valueoperations; import java.util.concurrent.timeunit; import java.util.concurrent.locks.readwrock; importação Rediscache implementa o cache {private estático final logger = LoggerFactory.getLogger (redisCache.class); Private final ReadWritelock ReadWritelock = new ReentrantreadWritelock (); ID de string final privado; // ID da instância do cache PRIVADO REDISTEMPLATE REDISTEMPLATE; Final estático privado Expire_time_in_minutes = 30; // Redis Expiration Time public Rediscache (string ID) {if (id == null) {lança nova ilegalargumentException ("instâncias de cache requerem um id"); } this.id = id; } @Override public String getId () {return id; } / ** * Coloque o resultado da consulta em redis * * @param key * @param value * / @Override public void putObject (chave do objeto, valor do objeto) {try {Redistemplate Redistemplate = getredistemplate (); ValueOperations opsForValue = Redistemplate.OpsForValue (); opsforvalue.set (chave, valor, expire_time_in_minutes, timeunit.minutes); Logger.debug ("Coloque o resultado da consulta para redis"); } catch (throwable t) {Logger.error ("Redis put falhou", t); }} / ** * Obtenha o resultado da consulta em cache de redis * * @param key * @return * / @Override public Object getObject (chave do objeto) {try {Redistemplate redistemplate = getredistemplate (); ValueOperations opsForValue = Redistemplate.OpsForValue (); Logger.debug ("Obtenha o resultado da consulta em cache de redis"); System.out.println ("****"+opsForValue.get (key) .toString ()); retornar opsforvalue.get (chave); } catch (throwable t) {Logger.error ("Redis falha, falha, falha no db", t); retornar nulo; }} / ** * Remova o resultado da consulta em cache de Redis * * @param key * @return * / @Override @Suppresswarnings ("desmarcado") public Object RemepObject (chave do objeto) {Try {Redistemplate Redistemplate = getredistemplate (); redistemplate.delete (chave); Logger.debug ("Remova o resultado da consulta em cache de Redis"); } catch (throwable t) {Logger.error ("Redis removido falhou", t); } retornar nulo; } / ** * Limpa esta instância do cache * / @Override public void clear () {Redistemplate redistemplate = getredistemplate (); RedisteMplate.execute ((Rediscallback) conexão -> {Connection.flushdb (); retorna null;}); Logger.debug ("Limpe todo o resultado da consulta em cache do Redis"); } / ** * Este método não é usado * * @return * / @Override public int getSize () {return 0; } @Override public readWritelock getReadWritelock () {return readWritelock; } private redistemplate getredistemplate () {if (redistemplate == null) {redistemplate = ApplicationContextholder.getBean ("Redistemplate"); } retornar Redistemplate; }}5. A interface serializável deve ser implementada na classe de entidade e o número da sequência deve ser declarado.
private estático final serialversionUid = -2566441764189220519L;
6. Ligue o cache de nível 2 de Mybatis
Configurar no arquivo de configuração POM.XML
mybatis.configuration.cache-inabed = true
Adicionar à interface do mapeador
@Cachenamespace (implementação = (com.demo.testdemo.cache.rediscache.class))
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.