一級緩存(本地緩存,開啓)sql
二級緩存手動開啓和配置,基於namespace級別的緩存數據庫
一級緩存(本地緩存):sqlsession級別的緩存,一級緩存是一直開啓的(與數據庫同一個會話期間查詢到的數會放在本地緩存中)緩存
相同數據只需從本地緩存中拿,不須要查詢數據庫session
一緩:一、sqlSession不一樣mybatis
二、sqlSession相同,查詢條件不一樣app
三、sqlsession相同,兩次查詢之間執行了增刪改操做lua
四、sqlSession相同,手動清除了一級(緩存清空)spa
二級緩存(全局緩存):基於namespase級別的緩存,一個namespace對應一個二級緩存xml
工做機制:一、查詢一條數據,這個數就會被放在當前會話的一級緩存接口
二、若是會話關閉,一級緩存會被保存到三級緩存,新的會話查詢信息
三、sqlSession==EmployeeMapper====>Employee
一、<setting name="cacheEnabled" value="true" />
二、在mapper.xml中配置使用二級緩存
<cache eviction="FIFO" flushInterval="6000" readOnly">
三、pojo實現序列化接口
eviction :緩存的回收策略 LRU:最近最少使用
FIFO:先進先出
SOFT:軟引用
WEAK:弱引用
readonly:是否只讀
true:只讀,mybatis認爲全部從數據的操做都是隻讀操做,不修改數據
false:非只讀,mybatis獲取的數據可能會被修改
size:緩存存放多少元素
type:指自定義緩存的全類名
fluashInternal:緩存刷新間隔(緩存多長時間清空一次)
效果:數據會從二級緩存中獲取
查出的數據都會被默認放在一級緩存中
只有會話提交或者關閉之後,一級緩存中的數據纔會轉移到二級緩存
緩存屬性:一、cacheEnable:false 關閉緩存(二級緩存)一級緩存不可用
二、每一個select標籤都有useCache=」true「 false 一級緩存依然使用,二級緩存不可用
三、每一個增刪改標籤flushcache="true" 增刪改標籤執行完成後清除緩存(一級緩存、二級緩存都清除)
四、查詢標籤flushcache="false"若是flushcache=true(每次查詢都清除緩存)
五、sqlsession.clearcache():只清除session的一級緩存
六、localcachescope:本地緩存做用域:當前會話全部數據保存在當前緩存中