本文介紹前文《JAD-CACHE緩存框架,架構設計篇》設計的JAD-CACHE框架的基礎上進一步介紹 JAD-CACHE若是實現本地緩存以及集成EhCache。git
目前項目已經在開源中國碼雲平臺上開源,代碼地址:api
https://git.oschina.net/457049726/jad-cache緩存
1、實現本地緩存服務器
Spring自帶的cache模塊自己內置了一個用Map實現的本地緩存。但由於功能比較簡單,JAD-CACHE對它進行了擴展,以下類圖:微信
上圖中,上面一排都是JAD-CACHE的抽象實現類,在前文已經介紹過了,本地緩存的實現,主要是下面一排的三個實現類。架構
圖中LocalMapCache類就是Cache接口的實現類,它繼承於JadAbstractCacheManager,擁有父類的可被CacheClient管理、支持緩存null值、支持差別化存活時間等特性。而它自己對於緩存數據的實現是經過它自身維護的ConcurrentMap列表來實現的。框架
在JAD-CACHE架構設計中,每個Cache實例都會被一個CacheClient管理,對於LocalMapCache,管理它的CacheClient就是SimpleLocalCacheClient實例。SimpleLocalCacheClient是AbstractCacheClient的子類,它實現的父類的抽象方法registryCacheManager(),在它被初始化的過程當中,註冊一個SimpleLocalCacheManager實例,做爲它控制的CacheManager(由於JAD-CACHE框架要求每個CacheClient實例中都持有一個CacheManager類型的引用)。SimpleLocalCacheManager類從JAD-CACHE框架中的JadAbstractCacheManager類繼承,並實現了getMissingCache(string),在這個getMissingCache()方法,實現了跟據參數決定是否須要自動建立Cache的邏輯。這使得,開發人員在須要使用某個Cache時,不須要事先配置,只須要使定它的autoCreateCache屬性爲true就能夠自動建立Cache了。spa
由於SimpleLocalCacheManager類是SimpleLocalCacheClient實例在初始化的時候自動建立並注入的,因此這個實例對於開發人員來講是透明的,開發人員只需配置SimpleLocalCacheClient實例而無需配置SimpleLocalCacheManager,只要控制SimpleLocalCacheClient的啓停等狀態,就能夠經過它自動注入的SimpleLocalCacheManager實例間接的操做緩存。.net
2、集成EhCache架構設計
Spring緩存模塊自己是自帶了與EhCache集成相關的CacheManager實現類。但應功能簡單,JAD-CACHE在這裏從新提供了幾個新的實現,以下圖:
上圖中JadEhCacheCache是Cache接口的實現類,它包裝了Ehcache這個Ehcache廠商實現的緩存對像。它實現了父類lookup(),get(),put()等操做緩存的抽像方法。具體實現邏輯就委託給Ehcache對像經過Ehcache自身的api去操做Ehcache緩存。
JadEhCacheCache實例對像的CacheClient實現類是EhcacheClient類,這個類從AbstractCacheClient繼承,除了擁有父類的autoCreateCache等屬性外,還有一個configFile屬性,這個屬性用於配置Ehcache配置文件和名稱路徑(默認爲classpath跟目錄下的ehcache.xml)。
JadEhCacheCache實例在初始化的時候,會自動注入一個JadEhCacheCacheManager類型的實例,這個類是JadAbstractCacheManager類的子類,它實現了父類的loadCaches()等方法,在它初始化的時候,會自動加載ehcache.xml配置文件中配置的Cache,並且具有自動建立缺省配置Cache的能力。
JadEhCacheCacheManager是EhcacheClient實例初始化的時候自動注入的,對開發人員人透明,開發人只要配置EhcacheClient實例而無需再配置JadEhCacheCacheManager就能夠集成Ehcache了。
3、集成MemCahce
Spring緩存模塊並無提供對MemCache的支持,須要實現,但因MemCache是一個服務器緩存,自身比較複雜。JAD-CACHE採用阿里開源的memcache客戶端代碼,在它的基礎上作了擴展,這裏暫不討論,稍後寫一篇文章單獨討論。
更多信息,歡迎掃如下二維碼關注個人微信公衆號: