1. 程式人生 > >簡單訴說mybatis一級快取和二級快取

簡單訴說mybatis一級快取和二級快取

Mybatis提供快取分別為一級快取和二級快取,用於減輕資料庫壓力,提高資料庫效能。

一級快取是SqlSession級別的快取;二級快取是mapper級別(namespace)的快取

一級快取作用域是sqlsession,生命週期是sqlsession,預設開啟,不能關閉,作用是提高查詢效率,速度和共享資料。相當於一個sql對話查詢多次,首先去快取中查詢,如果沒有,再去資料庫查詢,查出資料後再放入快取,下次查的時候,直接走快取,減少和資料庫的互動。回話一斷,一級快取隨之消失。增刪改的時候重新整理快取。

二級快取作用域是mapper(namespace),生命週期是和應用同步,比一級快取生命週期長,預設不開啟,作用是在一級快取的基礎上    延長資料儲存的時間。應用在配置好二級快取後,二級快取的週期和應用同步,只要是訪問同一個nameSpace的sql回話,就可以多個sql回話共享二級快取,也就是基於一級快取的基礎上,持續時間更長,支援多個sql會話共享快取的資料。

快取中重要的屬性 在statement中設定useCache false可以禁用當前select語句的二級快取,即每次查詢都會發出sql去查詢,預設情況是true,即該sql使用二級快取。

<select id=”findUserById” resultMap=”BaseResultMap” useCache=”false”>

總結:針對每次查詢都需要最新的資料,需要設定成useCache=”false”,禁用二級快取

在二級快取,如果insert、update、delete操作資料後要重新整理快取,如果不執行重新整理快取會出現髒讀。

設定statement配置中的flushCache=”true”屬性,預設情況下為true即重新整理快取,如果改成false則不會重新整理。

使用快取時如果手動修改資料庫表中的查詢資料會出現髒讀。

二級快取的應用場景

很少被修改的資料,不是很重要的資料,允許出現偶爾併發的資料或不會被併發訪問的資料

常用的快取外掛:

EhCache、redis(類似Memcached但要勝過Memcached)