1. 程式人生 > >Mybatis二級快取、分散式二級快取、逆向工程、Spring 整合 --day06

Mybatis二級快取、分散式二級快取、逆向工程、Spring 整合 --day06

Mybatis二級快取、分散式二級快取、逆向工程、Spring 整合 --day06

一、什麼是二級快取

上一篇介紹了一級快取,一級快取是一個sqlSession使用一個快取區域。那麼二級快取呢?
  思考,多個sqlSession,但是每個sqlSession都執行 通過id查詢使用者,如果只有一級快取可能出現多次 -查詢使用者id=1的使用者資訊- 那麼能不能讓多個sqlSession共享一塊快取區域呢,當然可以二級快取可以實現這一部分需求,–一級快取實在記憶體彙總快取,二級快取可能在記憶體中也可以在磁碟,伺服器等任何位置上。

二、開啟和關閉二級快取

settings 中設定:cacheEnable 為true——也是預設值,在mapper.xml檔案中 mapper標籤下 加上<cache/> 標籤即可開啟二級快取 對某一statement禁用二級快取,可以設定userCache 為false

三、二級快取範圍

同一個Mapper只有一個二級快取區域(一個明明空間對應一個二級快取區域)
多個sqlSession(都建立UserMapper代理物件),那麼它們都能訪問到這一塊快取區域

四、二級快取規則

 跟一級快取一樣,首次查詢某條記錄放入快取,下次查詢快取中存在直接得到,任何增刪改操作,commit後都會清空快取區域。

五、cache 引數

1.flushInterval 快取區重新整理間隔
2.readonly 設定為true 得到的結果不允許修改
3.size 設定緩衝區域大小

六、二級快取應用和不足

 應用場景:
 主要用於實時性要求不高的訪問較多的查詢和查詢比較耗費時間資源的複雜查詢。
 實際應用中配合flushInterval來使用,設定重新整理時間,訪問時從緩衝區獲取,對實時性要求不高。

 明顯不足:
 當查詢頻繁的時候,緩衝區中包含了大量資料,但是隻有極少部分發生了修改,清空整個緩衝區,對查詢效率影響很大,對單條資料修改,只改變緩衝區中的對應資料需要三級快取來完成。

七、分散式二級快取

使用分散式快取的原因:
 為了提高系統併發能力,系統性能,系統多采用分散式、叢集式部署。
 使用者訪問系統,系統生成使用者快取資訊,因為負載均衡使用者下一時間訪問系統訪問的是另一臺伺服器那麼這時候,快取資料如果仍然在原來的伺服器上,那麼系統此時是無法獲取到這一部分快取資料的,最常見的使用者登入,登入相關資訊如果在一臺伺服器上快取,那麼下一時間訪問,可能訪問的另一伺服器,得不到使用者的登入狀態相關資訊,讓使用者再次登入顯然是不可能的。
 解決這種問題的方式,通過分散式快取將快取資料集中管理,提供給每個伺服器使用。
mybatis 和 分散式框架的整合


 Mybatis提供了一個cache介面,並給出標準實現類 mybatis.cache下的Catch類 可以參考實現。
 分散式框架redis、memached、ehcache等都包含了 實現mybatis的cache介面的實現類。
將這個類的全限定名 賦給mapper檔案中配置 <cache/>的typle屬性就可以了

八、Spring整合Mybatis

  放到後面Spring總結時寫例子

九、Mybatis逆向工程

 Mybatis給定的包中修改 generatorConfig.xml 檔案 修改資料庫連線資訊,要逆向生成的表的資訊 run 就能得到兩個包 pojo 和mapper