MyBatis 缓存详解-缓存体系结构
生活随笔
收集整理的這篇文章主要介紹了
MyBatis 缓存详解-缓存体系结构
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
MyBatis 跟緩存相關的類都在cache 包里面,其中有一個Cache 接口,只有一個默認的實現類PerpetualCache,它是用HashMap 實現的。
除此之外,還有很多的裝飾器,通過這些裝飾器可以額外實現很多的功能:回收策略、日志記錄、定時刷新等等。
// 煎餅加雞蛋加香腸 “裝飾者模式(Decorator Pattern)是指在不改變原有對象的基礎之上,將功能附加到對象上,提供了比繼承更有彈 性的替代方案(擴展原有對象的功能)。”但是無論怎么裝飾,經過多少層裝飾,最后使用的還是基本的實現類(默認PerpetualCache)。?
所有的緩存實現類總體上可分為三類:基本緩存、淘汰算法緩存、裝飾器緩存。
| 緩存實現類 | 描述 | 作用 | 裝飾條件 |
| 基本緩存 | 緩存基本實現類 | 默認是PerpetualCache,也可以自定義比如 RedisCache、EhCache 等,具備基本功能的緩存類 | 無 |
| LruCache | LRU 策略的緩存 | 當緩存到達上限時候,刪除最近最少使用的緩存 (Least Recently Use) | eviction="LRU"(默 認) |
| FifoCache | FIFO 策略的緩存 | 當緩存到達上限時候,刪除最先入隊的緩存 | eviction="FIFO" |
| SoftCache WeakCache | 帶清理策略的緩存 | 通過JVM 的軟引用和弱引用來實現緩存,當JVM 內存不足時,會自動清理掉這些緩存,基于 SoftReference 和WeakReference | eviction="SOFT" eviction="WEAK" |
| LoggingCache | 帶日志功能的緩存 | 比如:輸出緩存命中率 | 基本 |
| SynchronizedCache | 同步緩存 | 基于synchronized 關鍵字實現,解決并發問題 | 基本 |
| BlockingCache | 阻塞緩存 | 通過在get/put 方式中加鎖,保證只有一個線程操 作緩存,基于Java 重入鎖實現 | blocking=true |
| SerializedCache | 支持序列化的緩存 | 將對象序列化以后存到緩存中,取出時反序列化 | readOnly=false(默 認) |
| ScheduledCache | 定時調度的緩存 | 在進行get/put/remove/getSize 等操作前,判斷 緩存時間是否超過了設置的最長緩存時間(默認是 一小時),如果是則清空緩存--即每隔一段時間清 空一次緩存 | flushInterval 不為 空 |
| TransactionalCache | 事務緩存 | 在二級緩存中使用,可一次存入多個緩存,移除多 個緩存 | 在 TransactionalCach eManager 中用Map 維護對應關系 |
思考:緩存對象在什么時候創建?什么情況下被裝飾?
我們要弄清楚這個問題,就必須要知道MyBatis 的一級緩存和二級緩存的工作位置和工作方式的區別。
?
?
?
總結
以上是生活随笔為你收集整理的MyBatis 缓存详解-缓存体系结构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MyBatis 缓存详解-cache 缓
- 下一篇: MyBatis 缓存详解-一级缓存(本地