MySQL緩存、MyBatis緩存

一、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查到的數據是髒數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章