MyBatis統合Ehcacheサードパーティキャッシュ

15582 ワード

学習アドレス:http://www.mybatis.org/ehcache-cache/
ステップ1:ehcacheダウンロードアドレスをダウンロードする:https://github.com/mybatis/ehcache-cache/releases
ステップ2:関連依存パッケージをlibフォルダにインポートし、依存を追加
在这里插入图片描述
MyBatis整合Ehcache第三方缓存_第1张图片
ステップ3:Ehcacheはslfjログフレームワークに依存し、slfjの2つのjarパッケージをインポートする必要があります.
在这里插入图片描述
MyBatis整合Ehcache第三方缓存_第2张图片
ステップ4:mybatis-configを修正する.xmlプロファイルMyBatisが2次キャッシュを開く新しいバージョンは、デフォルトで2次キャッシュを開くことをサポートしています.変えなくてもいい
<settings>
	<!--        -->
	<setting name="cacheEnabled" value="true"/>
</settings>


グローバルキャッシュポリシー
<!---->
<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>

グローバルキャッシュポリシーとは、すべてのMapperファイルがこのキャッシュポリシーを使用していることです.
ステップ6:xxxMapper.xml構成
<!---->
<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>

ステップ7:classpath(src)でehcacheを作成します.xmlプロファイル
<ehcache>
    <!--        () -->
    <diskStore path="D:/mybatis_cache"/>
    <!--        :                         ,       ,      ,         
        maxElementsInMemory              
        eternal                  
        timeToIdleSeconds         ,  : 
        timeToLiveSeconds         ,  : 
        overflowToDisk                 
    -->
    <defaultCache
            maxElementsInMemory="10000"
            eternal="false"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            overflowToDisk="true"
    />
</ehcache>



ステップ8:エンティティークラスのシーケンス化2次キャッシュがファイルにキャッシュされるため(オブジェクトをローカルにシーケンス化)、オブジェクトのシーケンス化に関連するため、対応するjavaBeanオブジェクトは実装する必要があります.
public class User implements Serializable{
	private static final long serialVersionUID = -8366151150155170110L;
}


ローカルキャッシュポリシー
ステップ6:マッピング・ファイルで対応するキャッシュ・ポリシーを構成および構成する
<mapper namespace="cn.zj.mybatis.dao.UserMapper">
	
	<!--               ,           ,          -->
	<cache type="org.mybatis.caches.ehcache.EhcacheCache" >
       <!--         -->
       <property name="timeToIdleSeconds" value="10000"/>
       <!--         -->
       <property name="timeToLiveSeconds" value="20000"/>
       <!--       b   m1 =1024k 1k=1024b -->
       <property name="maxEntriesLocalHeap" value="2000000"/>
       <!--       b  -->
       <property name="maxEntriesLocalDisk" value="20000000"/>
       <!--    LRU:      , "LFU" or "FIFO:     -->
       <property name="memoryStoreEvictionPolicy" value="LRU"/>
    </cache> 
	<select id="selectAll" resultType="User">
		select * from user
	</select>
</mapper>


ステップ7:エンティティークラスのシーケンス化2次キャッシュはファイルにキャッシュできるため(オブジェクトをローカルにシーケンス化)、オブジェクトのシーケンス化に関連するため、対応するjavaBeanオブジェクトは実装する必要があります.
public class User implements Serializable{
	private static final long serialVersionUID = -8366151150155170110L;
}


ステップ9:テストコード
	@Test
	public void testSelectByPrimaryKey() {
		for (int i = 0; i < 1000; i++) {
			// 1.  SqlSession    
			SqlSession openSession = MyBatisUtil.openSession();
			// 2.  UserMapper       
			UserMapper mapper = openSession.getMapper(UserMapper.class);
			User user2 = mapper.selectByPrimaryKey(3);
			System.out.println("  :"+user2);
			// 4.  session
			openSession.close();
		}
	}

キャッシュのヒット率ヒット率=キャッシュからデータを取得した回数/クエリの合計回数
たとえば、2回のクエリが1回の猶予から取得されます.
0.5 = 1/2;
0.666666 = 2/3;
ヒット率が高いほどキャッシュ効果が高くなります
DEBUG [main] - Cache Hit Ratio [cn.zj.mybatis.mapper.UserMapper]: 0.0 DEBUG [main] - ==> Preparing: select * from user where id = ? DEBUG [main] -> Parameters: 3(Integer) DEBUG [main] - < Total: 1 DEBUG [main] - Cache Hit Ratio [cn.zj.mybatis.mapper.UserMapper]: 0.5 DEBUG [main] - Cache Hit Ratio [cn.zj.mybatis.mapper.UserMapper]: 0.6666666666666666 DEBUG [main] - Cache Hit Ratio [cn.zj.mybatis.mapper.UserMapper]: 0.75 DEBUG [main] - Cache Hit Ratio [cn.zj.mybatis.mapper.UserMapper]: 0.8 DEBUG [main] - Cache Hit Ratio [cn.zj.mybatis.mapper.UserMapper]: 0.8333333333333334 DEBUG [main] - Cache Hit Ratio [cn.zj.mybatis.mapper.UserMapper]: 0.8571428571428571 DEBUG [main] - Cache Hit Ratio [cn.zj.mybatis.mapper.UserMapper]: 0.875 DEBUG [main] - Cache Hit Ratio [cn.zj.mybatis.mapper.UserMapper]: 0.8888888888888888 DEBUG [main] - Cache Hit Ratio [cn.zj.mybatis.mapper.UserMapper]: 0.9