MyBatis的二級快取的設計原理(四)

2021-10-08 17:55:00 字數 1451 閱讀 3627

1.mybatis的快取機制整體設計以及二級快取的工作模式

cachingexecutor是executor的裝飾者,以增強executor的功能,使其具有快取查詢的功能,這裡用到了設計模式中的裝飾者模式,

cachingexecutor和executor的介面的關係如下類圖所示:

2 . mybatis二級快取的劃分

mybatis對二級快取的支援粒度很細,它會指定某一條查詢語句是否使用二級快取。

mybatis支援二級快取的總開關:全域性配置變數引數 cacheenabled=true

該select語句的引數 usecache=true

二級快取    ———> 一級快取——> 資料庫
二級快取實現的選擇

mybatis對二級快取的設計非常靈活,它自己內部實現了一系列的cache快取實現類,並提供了各種快取重新整理策略如lru,fifo等等;另外,mybatis還允許使用者自定義cache介面實現,使用者是需要實現org.apache.ibatis.cache.cache介面,然後將cache實現類配置在節點的type屬性上即可;除此之外,mybatis還支援跟第三方記憶體快取庫如memecached的整合,總之,使用mybatis的二級快取有三個選擇:

1.mybatis自身提供的快取實現;

2. 使用者自定義的cache介面實現;

3.跟第三方記憶體快取庫的整合;

mybatis自身提供的二級快取的實現

mybatis自身提供了豐富的,並且功能強大的二級快取的實現,它擁有一系列的cache介面裝飾者,可以滿足各種對快取操作和更新的策略。

mybatis定義了大量的cache的裝飾器來增強cache快取的功能,如下類圖所示。

對於每個cache而言,都有乙個容量限制,mybatis各供了各種策略來對cache快取的容量進行控制,以及對cache中的資料進行重新整理和置換。mybatis主要提供了以下幾個重新整理和置換策略:

lru:(least recently used),最近最少使用演算法,即如果快取中容量已經滿了,會將快取中最近做少被使用的快取記錄清除掉,然後新增新的記錄;

fifo:(first in first out),先進先出演算法,如果快取中的容量已經滿了,那麼會將最先進入快取中的資料清除掉;

scheduled:指定時間間隔清空演算法,該演算法會以指定的某乙個時間間隔將cache快取中的資料清空;

MyBatis的二級快取

二級快取是sessionfactory級別的快取 跨越了兩個session 是需要手動開啟的。需求 操作mysql中資料庫seamybatis中的user表,使用二級快取查詢37號尤海的資訊 手動開啟方式 1 sqlmapconfig.xml配置檔案中新增開啟全域性快取 開啟全域性快取 select...

Mybatis的二級快取

但行好事,莫問前程cacheenabled預設是啟用的,只有在該值為true的時候,底層使用的executor才是支援二級快取的cachingexecutor。具體可參考mybatis的核心配置類org.apache.ibatis.session.configuration的newexecutor方...

mybatis二級快取

配置檔案 不用配置也是預設開啟的 在sqlmapconfig.xml中 cacheenabled value true 如果不需要二級快取,可以在設定禁用二級快取 select 這樣每次都是從資料庫中讀取 在執行insert,update,delete後會重新整理快取 清空快取 可以設定不重新整理 ...