Mybatis 一級快取 菜鳥日記--day06
阿新 • • 發佈:2018-12-23
Mybatis 一級快取 菜鳥日記–day06
一、快取概述
針對查詢結果進行快取,能夠提高資料庫效能,減少對資料庫的訪問,降低資料庫效能消耗。
這裡講的快取就是講查詢到的結果放到記憶體中(只限於一級快取),當下次需要獲取這條資料的時候就可以直接從快取中獲取,而不是再次去訪問資料庫來查詢得到。
##二、一級快取
1)快取級別
一級快取是sqlSession級別的快取,也就是說一個sqlSession物件有一個一級緩衝空間,
其他的sqlSession是沒有辦法獲取到這個快取中資料的。
2)mybatis對一級快取的支援
mybatis預設開啟一級快取不需要使用者去設定
3)基本規則
舉個例子同一個sqlSession下:
1.第一次查詢id=1的使用者,查詢得到結果並將結果放入一級快取區域中。
2.再次查詢,查詢條件相同 也是id=1 ,不會訪問資料庫查詢而是返回緩衝區中的第一次查詢到的資料。
3.執行了一條增刪改操作,並且commit,清空清空。
4.再次查詢id=1的使用者資訊,緩衝區中找不到對應資料,到資料庫查詢。
4)原理概述
拋開復雜過程看做:sqlSession類有一個(hashMap)來儲存快取資料: 根據使用者id查詢使用者,查詢條件相同,sql語句相同,傳入引數相同 上述這些因素(當然還包括好多其他因素)共同組合成一個key 第一次查詢快取(hashMap)中沒有該條記錄,訪問資料庫查詢,將查詢結果(value)和查詢條件(key)新增進HashMap 第二次訪問,如果key相同,直接從hashMap中讀取資料返回 進行修改操作,並commit();HashMap清空
5)Spring代理下的一級快取
正常使用過程中,Service進行事務的控制那麼一個Service中
service{
事務開始自動建立一個sqlSession
第一次使用id 查詢 id=1;
第二次使用id 查詢 id=1;//從快取區域中拿到資料
事務結束自動關閉sqlSession
}
顯然可以看出,一個事務內共享一個快取區域,多個事務間快取資料不共享。