本文介绍前文《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客户端代码,在它的基础上作了扩展,这里暂不讨论,稍后写一篇文章单独讨论。
更多信息,欢迎扫如下二维码关注个人微信公众号: