1. 程式人生 > >Mybatis 一級快取 菜鳥日記--day06

Mybatis 一級快取 菜鳥日記--day06

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
}
顯然可以看出,一個事務內共享一個快取區域,多個事務間快取資料不共享。