mybatis 二級緩存

一、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>

發佈了75 篇原創文章 · 獲贊 8 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章