導入
MyBatisを使用する場合、セカンダリキャッシュを使用してクエリ速度を上げてユーザーエクスペリエンスを向上させることができます。
Redisを使用してMyBatisのセカンダリキャッシュを作成しますが、メモリは制御可能です。セカンダリキャッシュのために別のサーバーが展開されている場合、簡単に管理できます。
1. pom.xmlファイルにredis依存関係を導入します
<Dependency> groupId> org.springframework.boot </groupid> <artifactid> spring-boot-starter-data-redis </artifactid> </dependency>
2。application.properties構成ファイルでredisを構成します
## 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.キャッシュパッケージを作成してから、2つのクラスを作成します。1つのApplicationContexTholderは、ApplicationContextAwareインターフェイスを実装します。特定のコンテンツは次のとおりです
パッケージcom.ruijie.springbootandredis.cache; import org.springframework.beans.beansexception; Import org.springframework.context.applicationcontext; Import org.springframework.context.applicationcontextaware; Import org.spramework.stringframework ApplicationContExtholderはApplicationContextAwareを実装しています{private static applicationContext ApplicationContext; @Override public void setApplicationContext(applicationContext ctx)throws beansexception {applicationContext = ctx; } / ** *どこからでもアプリケーションコンテキストを取得 * * @return * / public static applicationContext getApplicationContext(){return applicationContext; } / ** * class by class * * @param clazz * @param <t> * @return * / public static <t> t getbean(class <t> clazz){return applicationContext.getBean(clazz); } / ** *クラス名でBeanを取得 * * @param name * @param <t> * @return * / public static <t> t getbean(string name){return(t)applicationContext.getBean(name); }}4. Rediscacheクラスを作成してキャッシュインターフェイスを実装します。特定のコンテンツは次のとおりです。
パッケージcom.ruijie.springbootandredis.cache; Import org.apache.ibatis.cache.cache; Import org.slf4j.logger; Import org.slf4j.loggeractory; import org.springframework.data.redis.core.core.core.core.core.core org.springframework.data.redis.core.redistemplate; Import org.springframework.data.redis.core.valueoperations; Import java.util.concurrent.timeunit; Import java.util.concurrent.locks.readwritelock; Import; java.util.concurrent.locks.reentrantreadwriteLock;パブリッククラスの再発行性cache {private static final logger logger = loggerfactory.getlogger(rediscache.class);プライベート最終readwritelock readwritelock = new ReentrantreadWritelock();プライベート最終文字列ID; // Cache Instance ID Private Redistemplate Redistemplate;プライベート静的最終long expire_time_in_minutes = 30; // redis expiration time public rediscache(string id){if(id == null){throw new IllegalargumentException( "Cache Instances required required id"); } this.id = id; } @Override public String getId(){return id; } / ** *クエリの結果をRedis * * @param key * @param value * / @override public void putobject(object key、object value){try {redistemplate redistemplate = getRedistemplate(); valueperations opsforvalue = redistemplate.opsforvalue(); opsforvalue.set(key、value、expire_time_in_minutes、timeunit.minutes); logger.debug( "redisにクエリ結果を置く"); } catch(throwable t){logger.error( "redis put failed"、t); }} / ** * redisのキャッシュクエリの結果を取得 * * @param key * @return * / @override public object getobject(object key){try {redistemplate redistemplate = getRedistemplate(); valueperations opsforvalue = redistemplate.opsforvalue(); logger.debug( "redisからのキャッシュクエリの結果を取得"); system.out.println( "****"+opsforvalue.get(key).toString()); return opsforvalue.get(key); } catch(throwable t){logger.error( "redis get failed、fail over db"、t); nullを返します。 }} / ** * redisからキャッシュクエリの結果を削除 * * @param key * @return * / @override @suppresswarnings( "unchecked")public object remaidObject(object key){try {redistemplate redistemplate = getredistemplate(); redistemplate.delete(key); logger.debug( "redisからキャッシュクエリの結果を削除"); } catch(throwable t){logger.error( "redis redived failed"、t); } nullを返します。 } / ** *このキャッシュインスタンスをクリア * / @Override public void clear(){redistemplate redistemplate = getRedistemplate(); redistemplate.execute((rediscallback)connection-> {connection.flushdb(); return null;}); logger.debug( "Redisからのすべてのキャッシュクエリの結果をクリア"); } / ** *このメソッドは使用されていません * * @return * / @Override public int getSize(){return 0; } @Override public readwriteLock getReadWritelock(){return readwritelock; } private redistemplate getRedistemplate(){if(redistemplate == null){redistemplate = applicationContextholder.getBean( "redistemplate"); } Redistemplateを返します。 }}5.シリアル化可能なインターフェイスはエンティティクラスに実装する必要があり、シーケンス番号を宣言する必要があります。
private static final long serialversionuid = -2566441764189220519l;
6. MyBatisのレベル2キャッシュをオンにします
pom.xml構成ファイルで構成します
mybatis.configuration.cache-enabled = true
マッパーインターフェイスに追加します
@cachenamespace(実装=(com.demo.testdemo.cache.rediscache.class)))
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。