MyBatis統合Ehcacheサードパーティキャッシュ
15582 ワード
学習アドレス:http://www.mybatis.org/ehcache-cache/
ステップ1:ehcacheダウンロードアドレスをダウンロードする:https://github.com/mybatis/ehcache-cache/releases
ステップ2:関連依存パッケージをlibフォルダにインポートし、依存を追加
ステップ3:Ehcacheはslfjログフレームワークに依存し、slfjの2つのjarパッケージをインポートする必要があります.
ステップ4:mybatis-configを修正する.xmlプロファイルMyBatisが2次キャッシュを開く新しいバージョンは、デフォルトで2次キャッシュを開くことをサポートしています.変えなくてもいい
グローバルキャッシュポリシー
グローバルキャッシュポリシーとは、すべてのMapperファイルがこのキャッシュポリシーを使用していることです.
ステップ6:xxxMapper.xml構成
ステップ7:classpath(src)でehcacheを作成します.xmlプロファイル
ステップ8:エンティティークラスのシーケンス化2次キャッシュがファイルにキャッシュされるため(オブジェクトをローカルにシーケンス化)、オブジェクトのシーケンス化に関連するため、対応するjavaBeanオブジェクトは実装する必要があります.
ローカルキャッシュポリシー
ステップ6:マッピング・ファイルで対応するキャッシュ・ポリシーを構成および構成する
ステップ7:エンティティークラスのシーケンス化2次キャッシュはファイルにキャッシュできるため(オブジェクトをローカルにシーケンス化)、オブジェクトのシーケンス化に関連するため、対応するjavaBeanオブジェクトは実装する必要があります.
ステップ9:テストコード
キャッシュのヒット率ヒット率=キャッシュからデータを取得した回数/クエリの合計回数
たとえば、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
ステップ1:ehcacheダウンロードアドレスをダウンロードする:https://github.com/mybatis/ehcache-cache/releases
ステップ2:関連依存パッケージをlibフォルダにインポートし、依存を追加
ステップ3:Ehcacheはslfjログフレームワークに依存し、slfjの2つのjarパッケージをインポートする必要があります.
ステップ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