1. 程式人生 > >MyBatis (五)一級快取和二級快取的區別

MyBatis (五)一級快取和二級快取的區別

什麼叫快取

將資料存放在程式記憶體中,用於減輕資料查詢的壓力,提升讀取資料的速度,提高效能。

一級快取

■ 兩個級別

SqlSession級別的快取,實現在同一個會話中資料的共享

Statement級別的快取,可以理解為快取只對當前執行的這一個Statement有效,執行完後就會清空快取

■ 一級快取的生命週期和SqlSession一致

■ 設定為SqlSession級別的快取,當執行insert/update/delete操作或close之後,快取清空

■ MyBatis的一級快取最大範圍是SqlSession內部,有多個SqlSession或者分散式的環境下,資料庫寫操作會引起髒資料,建議設定快取級別為Statement

二級快取

■ SqlSessionFactory級別的快取,實現不同會話中資料的共享,是一個全域性變數

■ 儲存作用域為Mapper的namespace級別

■ 可自定義儲存源,如 EHCache(分散式快取框架)

■ 當開啟快取後,資料的查詢執行的流程就是二級快取-> 一級快取 -> 資料庫

■ 不同於一級快取,二級快取可設定是否允許重新整理和重新整理頻率

■ MyBatis的二級快取不適應用於對映檔案中存在多表查詢的情況,如果多個對映檔案對應的Sql操作都使用的是同一塊快取,那麼快取的粒度就變粗了,多個Mappernamespace下的所有操作都會對快取使用造成影響。

推薦一個“美團技術點評團隊”寫的關於MyBatis快取機制的分析