SpringBoot2.x系列教程(五十八)SpringBoot集成Mybatis的一級緩存和二級緩存

SpringBoot集成Mybatis幾乎已經成爲大多數項目的標配了,但在使用的過程中Mybatis的緩存功能往往會被大家遺忘,甚至很多開發者都沒意識到在SpringBoot集成Mybatis還有一級緩存和二級緩存的事。

本來沒計劃寫本篇文章,但在實踐的過程掉坑裏了,當從坑中爬起來時,發現有必要給大家寫寫Mybatis的緩存。

遇到什麼樣的坑

事情是這樣的:項目中使用了樂觀鎖,並進行了失敗嘗試(3次)。但運行的時候發現嘗試也是失敗的。起初以爲是併發問題,然後把嘗試次數無限放大,發現次次都是失敗的。

這其中一定有問題,經過研究發現是Mybatis的一級緩存導致的,於是專門研究了Mybatis的一級和二級緩存分享給大家。

緩存存在的意義

其實在日常的項目中,我們幾乎都會用到緩存,比如一些不怎麼改變的配置項,會採用緩存來減少數據庫的壓力。Mybatis的一級二級緩存所起到的作用也是相同的。都是爲了減少數據庫壓力,提高系統性能。

兩個基本緩存的區別

Mybatis的一級緩存與二級緩存的主要區別是它們所緩存的範圍不同。一級緩存是單個session級別的,二級緩存是多個session級別的,只不過多個session需要是同一個namespace下的。關於細節我們後面會逐一介紹。

這裏所說的session與我們在Http請求中所說的session可以類別,但並不是同一個session。Http中是session指定的是HttpSession,而這裏所說的session是指的查詢數據庫的SqlSession。

一次網頁請求,可以創建一個session(HttpSession),一次數據庫查詢操作同樣會創建一個session(SqlSession)。對照一下,就會很容易理解。

一級緩存

先通過通過下圖我們來看看一級緩存的整個流轉過程。

html>

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