一、MySQL
1、何時緩存:
- 緩存的 key:SQL (所以sql語句要完全相同才能使用上緩存)
緩存的 value:結果集 - where條件中如包含了某些函數永遠不會被緩存, 比如current_date, now等
- 太大的結果集不會被緩存
2、何時緩存失效:
- 表數據有任何修改,則有關於該表的數據全部失效
二、MyBatis
1、一級緩存,一級緩存是SqlSession級別的緩存,對於相同的查詢,會從緩存中返回結果而不是查詢數據庫
作用域是SqlSession
2、二級緩存,二級緩存是Mapper級別的緩存,定義在Mapper文件的標籤中並需要開啓此緩存,多個Mapper文件可以共用一個緩存,依賴標籤配置。
作用域是一個NameSpace( 一般情況下一個NameSpace即一個Mapper)
二級緩存不建議使用,因爲二級緩存有嚴重的使用問題:
例如:
MapperA聯合查詢AB表中數據
MapperA:select from tableA left join tableB on ……
MapperB修改了數據
MapperB:insert into tableB values ……
由於MapperA和MapperB不在同一個作用域,即使MapperB新增了數據,MapperA緩存也不會刷新,造成MapperA查到的數據是髒數據。