研究mybatis的二級快取需要去扒拉下人家的源**,研究mybatis提供的官方jar包;
研究方向萬變不離其宗,就算不去看人家的源**,我們猜一猜也能猜到個大概,大概是用map快取,
然後用整串的sql+引數作為key,然後查詢結果作為value,至於是不是我們可以後面再瞅瞅。
我們主要看兩塊兒,一塊兒是cache,一塊兒是cacheingexecutor
資料結構分析
核心介面:cache
貼出來就是讓你看看,裡面沒啥乾貨
真正的資料結構來了:perpetualcache
你看,是不是驗證了我的設想,就是用了乙個map來儲存
然後我們會發現cache包下面還有乙個東西叫decorators
他的實現方式有很多種,很好奇,為毛用這麼多的實現,其實實現這麼多只是使用了乙個裝飾者模式,目的是為了給快取加上各種裝飾
decorators,單詞的意思叫裝飾,很自然的就會想到設計模式裡的裝飾者模式,如果讀者不了解裝飾者模式的可以先去了解下然後往下閱讀
fifocache
loggingcache
lrucache
scheduledcache
serializedcache
softcache
synchronizedcache
transactionalcache
weakcache
blockingcache
我們看到loggincache,猜想下就是日誌,softcache 軟引用 weakcache 弱引用 fifocahce 先進先出,一看就是給快取加上了一些功能,就是通過裝飾者模式給快取加上各種不同的自定義功能。
可以簡單的看下其中某乙個裝飾者
可以看到都是裡面包含了乙個cache,然後層次的遞進引用,引用到最後一波就是perpetualcache,反過來可以看到拿最基礎的perpetualcache一層一層的給他包裹新功能,這就是裝飾者模式的典型的應用場景
,資料結構到此基本上結束了。
核心**就是下面的這段,建議大家自己打個斷點就能理解的更形象一點,我這邊文字描述的再詳細畢竟只是我自己的理解
throws sqlexception
return list;}}
// 委託模式,交給******executor等實現類去實現方法 如果沒有快取那就得去自己跑了
return delegate. query(ms, parameterobject, rowbounds, resulthandler, key, boundsql);}
簡單的呼叫基本上就結束了,大道至簡不是麼,恭喜畢業,剩下的細節大家自己帶鐵鍬挖,只是領你入門。
1 基礎bean必須要實現序列化介面
2 查詢條件要謹慎,如果不訊息用了乙個動態的引數,比如當前時間,那麼就不適合,因為實時改變,key一直變,這時候你加了快取,效能會變差
總結:如果基礎bean沒有實現序列化介面或者是第二種情況,快取均不會生效,這時候你開啟了快取,但是快取沒卵用,效能反而會降低。
cachingexecutor描述的引用更詳細點
sprngboot中如何使用二級快取
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....