Mybatis快取解析

2021-10-08 15:21:44 字數 1754 閱讀 3501

mybatis 提供查詢快取,用於減輕資料壓力,提高資料庫效能。

mybatis 提供一級快取,和二級快取。

一級快取:

一級快取就是sqlsession級別快取。在運算元據庫時需要構造sqlsession物件,在物件中有乙個資料結構(hashmap)用於儲存快取資料,不同的sqlsession之間的快取資料區域(hashmap)是相互不影響的。

二級快取:為什麼要用快取?

如果快取中有資料就不用從資料庫中獲取,大大提高系統效能。

原理:

第一次發起查詢使用者id為1 的使用者資訊,先去找快取中是否有id為1的使用者資訊,如果沒有,從資料庫查詢使用者資訊。

得到使用者資訊,將使用者資訊儲存到一級快取中。

如果sqlsession去執行commit操作(執行插入、更新、刪除)清空sqlsession中一級快取,這樣做的目的為了讓快取中儲存的是最新的資訊,避免髒資料

第二次發起查詢使用者id為1 的使用者資訊,先去找快取中是否有id為1的使用者資訊,快取中有,直接從快取中獲取使用者資訊。

一級快取測試:

mybatis預設支援一級快取,不需要在配置檔案去配置。但是要使用同乙個sqlsession物件。

一級快取應用service{

//開始執行時,開啟事務,建立sqlsession物件。

//方法結束,sqlsession關閉。

如果是執行兩次service呼叫查詢相同 使用者資訊,不走一級快取,因為session方法結束,sqlsesion就關閉,一級快取就清空。 如果想用用就得使用二級快取。

二級快取原理圖:

首先開啟mybatis的二級快取。

sqlsession1 去查詢使用者id為1的使用者資訊,查詢到使用者資訊將查詢資料儲存到二級快取中。

sqlsession2 去查詢使用者id為1的使用者資訊,去緩衝中找是否存在資料,如果存在直接從快取中取出資料。。

開啟二級快取為了將快取資料取出執行反序列化操作,因為二級快取資料儲存介質多種多樣,不一定在記憶體中。

禁用二級快取

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

重新整理快取

一般情況下,去執行 insert 、delete、updae等commit操作都需要重新整理快取,flushcache=true 表示重新整理快取,這樣可以避免資料庫髒讀。

細粒度的資料級別快取實現不好,比如 商品a存入快取中,商品b存入快取中,商品c存入快取中,但是 突然商品b進行了 修改或者刪除就會把 商品a/b/c在mybatis二級快取中的資料全部清空,而不是只清空商品b的快取,細粒度不友好。

Mybatis 快取原理及失效情況解析

1 什麼是快取 cache 2 為什麼要使用快取 減少和資料庫的互動次數,減少系統開銷,提高系統效率。3 什麼樣的資料需要使用快取 經常查詢且不易改變的資料 4 mybatis快取 5 一級快取 一級快取也叫本地快取 6 一級快取失效的四種情況 test publicvoidtestqueryuse...

hibernate快取,mybatis快取詳解

hibernate的快取有一級快取,二級快取,查詢快取。一級快取 很簡單,session級別的快取,通過get,update可以將物件放到一級快取中。二級快取 sessionfactory級別的快取,通過get,list可以將物件放到二級快取中,這裡我必須細講一下,list雖然能夠把物件放入二級快取...

Mybatis 三 Mybatis快取配置

強烈推薦乙個大神的人工智慧的教程 使用快取可以提高獲取資料的速度,避免頻繁的資料庫互動,尤其是在查詢越多,快取命中率越高的情況下,使用快取的作用就更加明顯了。一般提到mybatis快取的時候都是指二級快取,一級快取缺省會啟用。catch ioexception ignore public sqlse...