MyBatis中的二級快取

2021-07-24 17:26:54 字數 2396 閱讀 9252

目錄(?)

[+]

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

明白了mybatis中二級快取的原理後,接下來就是如何使用二級快取了。在使用之前,首先得開啟二級快取的開關。

開啟了二級快取後,還需要將要快取的pojo實現serializable介面,為了將快取資料取出執行反序列化操作,因為二級快取資料儲存介質多種多樣,不一定只存在記憶體中,有可能存在硬碟中,如果我們要再取這個快取的話,就需要反序列化了。所以建議mybatis中的pojo都去實現serializable介面。下面以user為例截個圖: 

@test

public

void

testcache2() throws exception

我們先把sqlsession3部分注釋掉來測試一下二級快取的結果: 

當我們把sqlsession3部分加上後,再測試一下二級快取結果: 

到這裡,就明白了mybatis中二級快取的執行原理了,這個跟hibernate還是有點像的。也可以對照著我寫的hibernate的二級快取的博文看(不過建議把下面的ehcache部分看完再對照hibernate看)。

mybatis中還可以配置usercache和flushcache等配置項,usercache是用來設定是否禁用二級快取的,在statement中設定usecache=false可以禁用當前select語句的二級快取,即每次查詢都會發出sql去查詢,預設情況是true,即該sql使用二級快取。

id="findorderlistresultmap"

resultmap="ordersusermap"

usecache="false">

id="insertuser"

parametertype="cn.itcast.mybatis.po.user"

flushcache="true">

一般下執行完commit操作都需要重新整理快取,flushcache=true表示重新整理快取,這樣可以避免資料庫髒讀。所以我們不用設定,預設即可,這裡只是提一下。

上面的部分主要總結了一下mybatis中二級快取的使用,但是mybatis中預設自帶的二級快取有個弊端,即無法實現分布式快取,什麼意思呢?就是說快取的資料在自己的伺服器上,假設現在有兩個伺服器a和b,使用者訪問的時候訪問了a伺服器,查詢後的快取就會放在a伺服器上,假設現在有個使用者訪問的是b伺服器,那麼他在b伺服器上就無法獲取剛剛那個快取,如下圖所示: 

所以我們為了解決這個問題,就得找乙個分布式的快取,專門用來儲存快取資料的,這樣不同的伺服器要快取資料都往它那裡存,取快取資料也從它那裡取,如下圖所示: 

這樣就能解決上面所說的問題,為了提高系統併發效能、我們一般對系統進行上面這種分布式部署(集群部署方式),所以要使用分布式快取對快取資料進行集中管理。但是mybatis無法實現分布式快取,需要和其它分布式快取框架進行整合,這裡主要介紹ehcache。

xmlns:xsi=""

xsi:nonamespaceschemalocation="../config/ehcache.xsd">

path="f:\develop\ehcache"/>

maxelementsinmemory="10000"

eternal="false"

timetoidleseconds="120"

timetoliveseconds="120"

maxelementsondisk="10000000"

diskexpirythreadintervalseconds="120"

memorystoreevictionpolicy="lru">

strategy="localtempswap"/>

defaultcache>

ehcache>

這裡面配置的作用跟hibernate差不多,大家可以去參考我那篇hibernate二級快取的博文。接下來就是測試了,還是用上面的那個測試程式,因為只改掉了快取,其他沒動。到此為止,mybatis的二級快取差不多就總結完了。

mybatis二級快取

配置檔案 不用配置也是預設開啟的 在sqlmapconfig.xml中 cacheenabled value true 如果不需要二級快取,可以在設定禁用二級快取 select 這樣每次都是從資料庫中讀取 在執行insert,update,delete後會重新整理快取 清空快取 可以設定不重新整理 ...

mybatis 二級快取

一 mybatis 二級快取 3 mybatis 預設二級快取未開啟 內建是支援二級快取的。但是由於本身是資料庫管理元件 所以快取並不好用 所以還是要用第三方的快取機制。典型的 ehcache 二 二級快取的常見演算法 lru least recently used 這種演算法是在每個物件中維護乙個...

Mybatis二級快取

原文找不到了,如果作者看到了可以留下位址,我再加上引用 sqlsession2去查詢使用者id為1的使用者資訊,去快取中找是否存在資料,如果存在直接從快取中取出資料。明白了mybatis中二級快取的原理後,接下來就是如何使用二級快取了。在使用之前,首先得開啟二級快取的開關。2.1 開啟二級快取 2....