查詢緩存html
一級緩存是SqlSession級別的緩存。在操做數據庫時須要構造 sqlSession對象,在對象中有一個數據結構(HashMap)用於存儲緩存數據。不一樣的sqlSession之間的緩存數據區域(HashMap)是互相不影響的。mysql
二級緩存是mapper級別的緩存,多個SqlSession去操做同一個Mapper的sql語句,多個SqlSession能夠共用二級緩存,二級緩存是跨SqlSession的。算法
工做原理sql
一級緩存數據庫
一級緩存工做原理圖緩存
第一次發起查詢用戶id爲1的用戶信息,先去找緩存中是否有1的用戶,若是有的話拿去用,若是沒有去數據庫中查去。獲得用戶信息放入一級緩存中去。若是SqlSession去執行commit操做(執行插入、刪除、更新)的話,清空SqlSession中的一級緩存,這樣作就是爲了讓緩存中的數據保持最新,避免用戶讀到錯誤的數據。數據結構
二級緩存mybatis
二級緩存工做原理圖app
首先得開啓二級緩存,sqlSession1去查詢用戶id爲1的用戶信息,查詢到用戶信息會將查詢數據存儲到二級緩存中。若是SqlSession3去執行相同 mapper下sql,執行commit提交,清空該 mapper下的二級緩存區域的數據。sqlSession2去查詢用戶id爲1的用戶信息,去緩存中找是否存在數據,若是存在直接從緩存中取出數據。spa
一級緩存和二級緩存的區別
二級緩存的範圍更大,多個sqlSession能夠共享一個UserMapper的二級緩存區域。UserMapper有一個二級緩存區域(按namespace分) ,其它mapper也有本身的二級緩存區域(按namespace分)。每個namespace的mapper都有一個二緩存區域,兩個mapper的namespace若是相同,這兩個mapper執行sql查詢到數據將存在相同 的二級緩存區域中。
開啓二級緩存
mybaits的二級緩存是mapper範圍級別,除了在Configuration.xml設置二級緩存的總開關,還要在具體的mapper.xml中開啓二級緩存。
在mapper.xml中開啓緩存
在配置文件中,具體的select配置中屬性 useCache=false禁用二級緩存。即針對當前的sql語句每次都要求是數據庫最新的內容