MyBatis 缓存详解-开启二级缓存的方法
第一步:在mybatis-config.xml 中配置了(可以不配置,默認是true):
<setting name="cacheEnabled" value="true"/>只要沒有顯式地設置cacheEnabled=false,都會用CachingExecutor 裝飾基本的執行器。
第二步:在Mapper.xml 中配置<cache/>標簽:
<!-- 聲明這個namespace 使用二級緩存--> <cache type="org.apache.ibatis.cache.impl.PerpetualCache" size="1024" <!—最多緩存對象個數,默認1024--> eviction="LRU" <!—回收策略--> flushInterval="120000" <!—自動刷新時間ms,未配置時只有調用時刷新--> readOnly="false"/> <!—默認是false(安全),改為true 可讀寫時,對象必須支持序列 化-->cache 屬性詳解:
| type | 緩存實現類 | 需要實現Cache 接口,默認是PerpetualCache |
| size | 最多緩存對象個數 | 默認1024 |
| eviction | 回收策略(緩存淘汰算法) | LRU – 最近最少使用的:移除最長時間不被使用的對象(默認)。 FIFO – 先進先出:按對象進入緩存的順序來移除它們。 |
| flushInterval | 定時自動清空緩存間隔 | 自動刷新時間,單位ms,未配置時只有調用時刷新 |
| readOnly | 是否只讀 | true:只讀緩存;會給所有調用者返回緩存對象的相同實例。因此這些對象 不能被修改。這提供了很重要的性能優勢。 false:讀寫緩存;會返回緩存對象的拷貝(通過序列化),不會共享。這 會慢一些,但是安全,因此默認是false。 改為false 可讀寫時,對象必須支持序列化。 |
| blocking | 是否使用可重入鎖實現 緩存的并發控制 | true,會使用BlockingCache 對Cache 進行裝飾 默認false |
Mapper.xml 配置了<cache>之后,select()會被緩存。update()、delete()、insert()會刷新緩存。
思考:如果cacheEnabled=true,Mapper.xml 沒有配置標簽,還有二級緩存嗎?還會出現CachingExecutor 包裝對象嗎?
只要cacheEnabled=true 基本執行器就會被裝飾。有沒有配置<cache>,決定了在啟動的時候會不會創建這個mapper 的Cache 對象,最終會影響到CachingExecutorquery 方法里面的判斷:
if (cache != null) {如果某些查詢方法對數據的實時性要求很高,不需要二級緩存,怎么辦?
我們可以在單個Statement ID 上顯式關閉二級緩存(默認是true):
<select id="selectBlog" resultMap="BaseResultMap" useCache="false">了解了二級緩存的工作位置和開啟關閉的方法之后,我們也來驗證一下二級緩存。
?
總結
以上是生活随笔為你收集整理的MyBatis 缓存详解-开启二级缓存的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MyBatis 缓存详解-二级缓存介绍
- 下一篇: MyBatis 缓存详解-二级缓存验证