1. 程式人生 > >MyBatis緩存設計

MyBatis緩存設計

深入理解 減少 註意 支持 歷史數據 lse 深入 ash IT

和大多數ORM框架一樣,為了盡可能減少數據庫的訪問,MyBatis設計支持緩存功能。設計上通過Cache接口提供SPI(服務提供接口),可以讓第三方緩存提供具體的緩存實現,比如使用ehcache、Redis等,通過這些常用環境提供的實現類,即可將其配置成MyBatis中使用的緩存。

除了給第三方緩存提供SPI接口外,MyBatis自身也通過HashMap做了簡單的緩存實現。總體上MyBatis緩存設計分為一級緩存和二級緩存。

MyBatis一級緩存是SqlSession級別的本地緩存,默認開啟不支持配置,緩存生命周期與SqlSession生命周期相同,一級緩存只是簡單的實現,沒考慮SQLSession對象查詢數據太多導致緩存HashMap太大而導致OOM,也沒有更新緩存和緩存過期的概念,不過一般SqlSession對象的生存時間很短,且增刪改時都會清空緩存數據,所以MyBatis最初這樣設計。

MyBatis二級緩存是Mapper命名空間的緩存,支持跨多個Sqlsession對象使用,需要在Mapper xml文件中配置開啟,並可指定使用第三方緩存或自定義緩存。在開啟二級緩存的情況下可配置單條select語句是否緩存,也可配置單條增、刪、改語句是否刷新緩存。MyBatis二級緩存默認最近最少使用規則淘汰歷史數據。無法處理一批記錄中單條記錄更新的問題(一批記錄緩存後因為其中單條記錄修改而要清空緩存重新加載)。

《深入理解mybatis原理》 MyBatis緩存機制的設計與實

MyBatis的一級緩存實現詳解 及使用註意事項

MyBatis的二級緩存的設計原理

MyBatis緩存設計