mybatis緩存

mybatis提供查詢緩存,用於減輕數據庫壓力,提升性能。sql

一級緩存

一級緩存是sqlSession級別的,不一樣sqlSession之間的緩存數據區域相互不影響。在構造session對象時使用HashMap數據結構的內存區域存儲緩存數據。 
一級緩存默認是開啓的。 
sqlSession執行commit後會清空一級緩存,避免髒讀。數據庫

二級緩存

二級緩存是mapper級別的,不一樣sqlSession能夠共享同一個mapper中sql的緩存數據。 
二級緩存默認不是開啓的,須要經過setting配置開始segmentfault

<setting name="cacheEnabled" value="true"/>

禁用二級緩存

經過上面的配置能夠全局禁用二級緩存 
在statement中設置 useCache=false 能夠禁止當前sql語句的二級緩存,該配置默認是true。緩存

二級緩存的侷限性

二級緩存對細粒度的數據級別的緩存實現很差,由於是mapper級別的,同一個namespace下的數據緩存都會被刷新。session

flushCache和useCache的使用

當爲select語句時: 
flushCache默認爲false,表示任什麼時候候語句被調用,都不會去清空本地緩存和二級緩存。 
useCache默認爲true,表示會將本條語句的結果進行二級緩存。 
當爲insert、update、delete語句時: 
flushCache默認爲true,表示任什麼時候候語句被調用,都會致使本地緩存和二級緩存被清空。 
useCache屬性在該狀況下沒有。數據結構

一級緩存問題處理

怎麼禁用一級緩存的效果mybatis

sql級別app

flushCache="true"性能

全局FlushCachespa

<setting name="localCacheScope" value="STATEMENT"/>

mybaitis插件 

具體參考:https://segmentfault.com/a/1190000009062804

相關文章
相關標籤/搜索