1. 程式人生 > 其它 >Mybatis快取簡介

Mybatis快取簡介

查詢:連線資料庫,耗資源!

   一次查詢的結果,給它暫存在一個可以直接取到的地方!  -----記憶體:快取

 我們再次查詢相同資料的時候就直接走快取,不用走資料庫了

 

什麼是快取(Cache)?

   在記憶體中的臨時資料

 將使用者經常查詢的資料放在快取(記憶體)中,使用者去查詢資料就不用從磁碟上(關係型資料庫資料檔案)查詢,從快取中查詢,從而提高查詢效率,解決了高併發系統的效能問題。

為什麼使用快取?

 減少和資料庫互動的次數,減少系統的開銷,提高系統的效率。

什麼樣的資料能使用快取

 經常查詢且不經常改變的資料。

 

Mybatis快取

 Mybatis包含一個非常強大的查詢快取特性,他可以非常方便地定製和配置快取。快取可以極大提升查詢效率。

  Mybatis系統中預設定義了兩級快取:一級快取和二級快取

    預設情況下,只有一級快取開啟。(Sqlsession級別的快取,也稱為本地快取)

    二級快取需要手動開啟和配置,它是基於namespace級別的快取。

    為了提高擴充套件性,Mybatis定義了快取介面Cache。我們可以通過實現Cache介面來自定義二級快取。

 

一,一級快取

  一級快取也叫本地快取:Sqlsession

    與資料庫同一次會話期間查詢到的資料會存放在本地快取中。

    以後如果需要獲取相同的資料,直接從快取中拿,沒必要再去查詢資料庫

 

測試:

  1.開啟日誌

  2.測試在一個session中查詢兩次相同的記錄

  3.檢視日誌輸出  

 

sqlsession.close();就失效。

  快取失效的情況:

    1.查詢不同的資料

     2.增刪改操作可能會改變原來的資料,所以必定會重新整理快取。例如如下改操作  

 

 

        

 

       3.查詢不同的Mapper.xml

       4.手動清理快取

 

 

    

 

 小結:一級快取預設是開啟的,只在一次sqlsession中有效,也就是拿到連線到關閉連線這個區間有效。

  一級快取就是一個Map。

二,二級快取

    二級快取也叫全域性快取,一級快取的作用域太低了,所以誕生了二級快取

    基於namespace級別地快取,一個名稱空間,對應一個二級快取

    工作機制:

    一個會話查詢一條資料,這個資料就會被放在當前會話地一級快取中;

    如果當前會話關閉了,這個會話對應的一級快取就沒了,但是我們想要的是,會話關閉了,一級快取中的資料被儲存到二級快取中;

    新的會話查詢資訊,就可以從二級快取中獲取內容;

    不同的mapper查處的資料會放在自己對應的快取(map)中

 

測試:

  1.開啟全域性快取  

 

  2.在要使用二級快取的Mapper中開啟。

<cache/>

也可以自定義引數

 

 3.測試即可

     我們需要將實體類序列化!!!

 

 小結:只要開啟了二級快取,在同一個Mapper下就有效

    所有的資料都會先放在一級快取中

      只有當會話提交或者關閉的時候,才會提交到二級快取中

先走二級快取,再走一級快取,最後走資料庫

三,自定義Ehcache

  Ehcache是一種廣泛的開源Java分散式快取。