MyBatis (五)一級快取和二級快取的區別
阿新 • • 發佈:2019-01-10
什麼叫快取
將資料存放在程式記憶體中,用於減輕資料查詢的壓力,提升讀取資料的速度,提高效能。
一級快取
■ 兩個級別
SqlSession級別的快取,實現在同一個會話中資料的共享
Statement級別的快取,可以理解為快取只對當前執行的這一個Statement有效,執行完後就會清空快取
■ 一級快取的生命週期和SqlSession一致
■ 設定為SqlSession級別的快取,當執行insert/update/delete操作或close之後,快取清空
■ MyBatis的一級快取最大範圍是SqlSession內部,有多個SqlSession或者分散式的環境下,資料庫寫操作會引起髒資料,建議設定快取級別為Statement
二級快取
■ SqlSessionFactory級別的快取,實現不同會話中資料的共享,是一個全域性變數
■ 儲存作用域為Mapper的namespace級別
■ 可自定義儲存源,如 EHCache(分散式快取框架)
■ 當開啟快取後,資料的查詢執行的流程就是二級快取-> 一級快取 -> 資料庫
■ 不同於一級快取,二級快取可設定是否允許重新整理和重新整理頻率
■ MyBatis的二級快取不適應用於對映檔案中存在多表查詢的情況,如果多個對映檔案對應的Sql操作都使用的是同一塊快取,那麼快取的粒度就變粗了,多個Mappernamespace下的所有操作都會對快取使用造成影響。
推薦一個“美團技術點評團隊”寫的關於MyBatis快取機制的分析