一、mybatis 二級緩存
1、mybatis 的一級緩存是SqlSession。
2、mybatis 的二級緩存是基於同一命名空間(namespace) mapper。
3、mybatis 默認二級緩存未開啓、內置是支持二級緩存的。但是由於本身是數據庫管理組件、所以緩存並不好用、所以還是要用第三方的緩存機制。典型的:ehcache 。
二、二級緩存的常見算法
* LRU(Least Recently Used):這種算法是在每個對象中維護一個訪問的時間變量,每次訪問後,時間都會更新,當新的對象需要存放到緩存時,替換那個按時間排序最後的對象。
* LFU(Least Frequently Used):這種算法是每個對象記錄了對象訪問的次數(即命中率),當新的對象需要存放到緩存時,替換那個訪問次數最少的對象。
* FIFO(First In First Out):這種算法是將緩存中的對象存放成一個數組,當新的對象需要存放到內存中是,替換最先存放到緩存的對象。
三、mybatis 中開啓二級緩存
1、使用mybatis自帶的二級緩存
1).對象要實現 Serializable 接口
2).在mapper.xml映射文件中添加
<!-- 開啓緩存 -->
<cache/>
3).在mybatis-config.xml中添加
<!-- 開啓二級緩存 -->
<setting name="cacheEnabled" value="true"/>
2、使用第三方緩存(集成ehcache)
1). 導入jar包
* mybatis-ehcache-1.1.0.jar* ehcache-2.10.3.jar
* slf4j-api-1.7.7.jar
2).生成ehcache.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
<!-- 配置文件緩存溢出後存儲位置 -->
<diskStore path="c:/ehcache"></diskStore>
<!--
maxElementsInMemory : 緩存的最多個數
eternal : 對象永久有效、一旦設置爲true、那麼timeout就無效
timeToIdleSeconds : 設置對象失效前空閒的最大時間、當設置eternal="false"、才能起效
timeToliveSeconds : 設置對象失效前可以存活多少秒、設置0、表示永久有效
overflowToDisk : 溢出時寫入硬盤
-->
<defaultCache maxElementsInMemory="100000" eternal="false"
timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true"/>
</ehcache>
3).在mybatis-config.xml中開啓二級緩存
4).在mapper文件中指定cache類型爲ehcache
<!-- 開啓二級緩存 -->
<cache type="org.mybatis.caches.ehcache.EhcacheCache" ></cache>