1. 程式人生 > >mybatis學習(6):快取原理詳解

mybatis學習(6):快取原理詳解

一、快取原理圖

 

二、快取原理

 一級快取(本地快取)

sqlSession級別的快取一級快取是一直開啟的

SqlSession級別的一個Map
              與資料庫同一次會話期間查詢到的資料會放在本地快取中。
              以後如果需要獲取相同的資料,直接從快取中拿,沒必要再去查詢資料庫;
      
              一級快取失效情況(沒有使用到當前一級快取的情況,效果就是,還需要再向資料庫發出查詢):
              1、sqlSession不同。
              2、sqlSession相同,查詢條件不同.(當前一級快取中還沒有這個資料)
              3、sqlSession相同,兩次查詢之間執行了增刪改操作(這次增刪改可能對當前資料有影響)
              4、sqlSession相同,手動清除了一級快取(快取清空)
      

二級快取(全域性快取)

基於namespace級別的快取,一個namespace對應一個二級快取
              工作機制:
              1、一個會話,查詢一條資料,這個資料就會被放在當前會話的一級快取中;
              2、如果會話關閉;一級快取中的資料會被儲存到二級快取中;新的會話查詢資訊,就可以參照二級快取中的內容;
              3、sqlSession====EmployeeMapper==>Employee
                                           DepartmentMapper===>Department
                  不同namespace查出的資料會放在自己對應的快取中(map)
                  效果:資料會從二級快取中獲取
                            查出的資料都會被預設先放在一級快取

中。
                            只有會話提交或者關閉以後,一級快取中的資料才會轉移到二級快取中
              使用:
                  1)、開啟全域性二級快取配置:<setting name="cacheEnabled" value="true"/>
                  2)、去mapper.xml中配置
使用二級快取:
                      <cache></cache>
                  3)、我們的POJO需要實現序列化介面
          
      和快取有關的設定/屬性:
                  1)、cacheEnabled=true:false:關閉快取(二級快取關閉)(一級快取一直可用的)

                          也就是說全域性配置的cacheEnabled是二級快取開關
                  2)、每個select標籤都有useCache="true":也就是說,只要全域性二級快取開了,select標籤預設支援二級快取
                          false:不使用快取(一級快取依然使用,二級快取不使用
                  3)、【每個增刪改標籤的:flushCache="true":(一級二級都會清除)】
                          增刪改執行完成後就會清除快取;
                          測試:flushCache="true":一級快取就清空了;二級也會被清除;
                          查詢標籤:flushCache="false":
                              如果flushCache=true;每次查詢之後都會清空快取;快取是沒有被使用的;

                          也就是說增刪改的flushCache對一二級快取都起作用
                  4)、sqlSession.clearCache();只是清除當前session的一級快取
                  5)、localCacheScope:本地快取作用域:(一級快取SESSION);當前會話的所有資料儲存在會話快取中;
                                      STATEMENT:可以禁用一級快取;        
                      

第三方快取整合:


     1)、匯入第三方快取包即可;
     2)、匯入與第三方快取整合的適配包;官方有;
     3)、mapper.xml中使用自定義快取
            <cache type="org.mybatis.caches.ehcache.EhcacheCache"></cache>