通用缓存框架(JAD-CACHE)使用配置说明书java
编 号:JAD-INFR-CACHEgit
版 本:1.0.1-RELEASE程序员
拟制人:何川spring
本文档是开源项目JAD-CACEH的标准使用手册。api
JAD是本人跟据本身对技术的学习和理解,利用业余时间开发的一个基础架构项目,旨在为程序员提供一个高效的自动化开发平台,它涉及互联网JAVA后台技术基础架构的方方面面,好比持久化技术,好比缓存,好比分布式远程调用与微服务等等。缓存
目前项目已经在开源中国码云平台上开源,代码地址:安全
https://git.oschina.net/457049726/jad-cache服务器
由于JAD项目过于庞大,不少功能目前尚未完善。现决定先将其中作的比较完整的缓存模块单独从原项目中分离出来,成为一个独立的开源项目。架构
JAD-CACHE是对Spring3的缓存模块的简单扩展,支持Spring3缓存的全部注解,同时提供一些缓存操做的api,使开发人员以编码的方式操做缓存。框架
JAD-CACHE能方便快速的集成EhCache、MemCache等缓存厂商,而且能够经过配置或者在运行期间灵活禁用或启用缓存。大体功能汇总以下:
一、提供统一的缓存操做api;
二、支持同时使用 EhCache、MemCache等 多种缓存实现;
三、提供灵活的配置;
四、须要防止缓存穿透;
五、须要能够灵活指定缓存存活时间;
六、须要任意控制缓存的停用或启用。
缩写 |
英文全称 |
中文全称 |
JAD |
Java Auto Develop |
java自动化开发平台 |
JAD-CACHE |
Cache of JAD |
jad项目缓存模块 |
|
|
|
文件修订记录
版本修改记录 (A --- 增长 M --- 修改 D --- 删除)
当前版本 |
日期 |
修改位置 (图、表、章节) |
A/M/D |
简单描述 (缘由和修改简介) |
修改人 |
评审人 |
1.0.1-RELEASE |
2017-03-12 |
ALL |
A |
创建 |
何川 |
|
|
|
|
|
|
|
|
相关参考文档:
一、写本身的缓存框架,以同时支持ehcache、mecache及springcache注解等.docx
二、写本身的缓存框架,JAD-CACHE架构设计篇.docx
三、JAD-CACHE缓存框架,srping集成EhCache及实现本地缓存.docx
四、JAD-CACHE缓存框架,srping整合MemCache.docx
JAD-CACHE目前暂时只支持Map本地缓存与EhCache以及MemCache三种,开发人员能够单独使用其中一种,也能够同时使用这几种。
JAD-CACHE是典型的Maven项目,下分三个子模块jad-cache-api、jad-cache-ehcache、jad-cache-memcache。其中jad-cache-api为公用部分及相关api,jad-cache-ehcache为与Ehcache的集成模块,jad-cache-memcache为与memcache的集成模块。
开发人员在将本框架集成到项目中时,能够选择性的使用本身想集成的缓存实现,若是只使用Map本地缓存,就加入如下依赖:
<dependency>
<groupId>com.jad.infr</groupId>
<artifactId>jad-cache-api</artifactId>
<version>1.0.1-RELEASE</version>
</dependency>
若是你想用ehcache缓存,就用加入如下依赖:
<dependency>
<groupId>com.jad.infr</groupId>
<artifactId>jad-cache-ehcache</artifactId>
<version>1.0.1-RELEASE</version>
</dependency>
若是用memcache,就用如下依赖
<dependency>
<groupId>com.jad.infr</groupId>
<artifactId>jad-cache-memcache</artifactId>
<version>1.0.1-RELEASE</version>
</dependency>
提示:用ehcache或memcahce时,jad-cache-ehcache或jad-cache-memcache会自动把它相关依赖添加进来(包括本框架的jad-cache-api),用户无须再额外配置。
配置的方式跟Spring Cache原来的配置有所不一样,但都须要配置用于Srping解析注解的标签< cache:annotation-driven/>。
大体配置思路是:
1、配置< cache:annotation-driven/>
2、配置一个CacheClientManager类型的Bean指定一个客户端管理器
3、配置一个或多个CacheClient类型的Bean做为受CacheClientManager管理的客户端实例。
注意:在配置CacheClient后,应用启动时,框架会自动注入具体缓存厂商相关的CacheManager实例,因此开发人员无需再配置CacheManager。
上述三步现分三节单独说明,以下:
< cache:annotation-driven/>标签的配置,与Spring原来的的cache配置如出一辙,但本框架提供一另外一个KeyGenerator(com.jad.cache.common.SimpleCacheKeyGenerator)用以取代原来的KeyGenerator,推荐配置以下:
<cache:annotation-driven key-generator="keyGenerator"/>
<bean id="keyGenerator" class="com.jad.cache.common.SimpleCacheKeyGenerator" />
若是项目只使用一种缓存厂商,好比只使用EhCache或只使用MemCache,建议使用单客户端管理器com.jad.cache.common.impl.SingleClientManager,若是想在同一项目中同时使用EhCache和MemCache,或者要两在逻辑上把某些缓存归一类而另外一些缓存归为另外一类分别被不一样Client控制的话,可使用多客户端管理器com.jad.cache.common.impl.MultiClientManager。
单客户端管理器的实现类是SingleClientManager,最简单的配置以下所示:
<bean id="cacheClientManager" class="com.jad.cache.common.impl.SingleClientManager">
<property name="cacheClient" ref="ehcacheClient" />
</bean>
这里的bean的id能够随意指定,但必须有一个cacheClient属性,指向一个CacheClient类型的bean的id,关于CacheClient的配置,在下一节有说明。
在这个bean中还能够配置一些全局属性,做为全部缓存的全局默认配置,SingleClientManager可配置的全部属性以下表:
property |
可否缺省 |
默认值 |
说明 |
cacheClient |
否 |
|
指定它所管理的CacheCleint |
defActivityTime |
能 |
600 |
必须为整数,默认存活时间,大于0是才有效 |
allowNullValues |
能 |
true |
boolean类型,表示可否缓存空值 |
autoCreateCache |
能 |
true |
boolean类型,表示可否自动建立缓存 |
多客户端管理器的实现类是MultiClientManager,最简单的配置以下所示:
<bean id="cacheClientManager" class="com.jad.cache.common.impl.MultiClientManager"> <property name="defCacheClientName" value="localCacheClient" />
<property name="cacheClientList">
<list>
<ref bean="ehcacheClient"/>
<ref bean="localCacheClient"/>
</list>
</property>
</bean>
与单客户端管理器SingleClientManager不一样的是,须要指一个List类型的cacheClientList属性,以指定它能管理的全部的Client列表,同时须要指定一个默认的默户端,以便自动建立缓存时,用哪一个Client。
MultiClientManager可配置的全部属性以下表:
property |
可否缺省 |
默认值 |
说明 |
cacheClientList |
否 |
|
list类型,配置可管理的Client列表 |
defActivityTime |
能 |
600 |
必须为整数,默认存活时间,大于0是才有效 |
allowNullValues |
能 |
true |
boolean类型,表示可否缓存空值 |
autoCreateCache |
能 |
true |
boolean类型,表示可否自动建立缓存 |
defCacheClientName |
能 |
defCacheClient |
defCacheClientName的做用是:若是autoCreateCache参数为true系统在自动缓存时使用的Client。好比若是用户同时使用EhCache和MemCache时,能够经过这个参数指定EhCache做为默认的客户端。这样,若是没有在ehcache.xml或memcache.xml中配置某个Cache时而又要使用它时,则自动在ehcache中建立。 |
本框架目前暂时只支持Map本地缓存与EhCache以及MemCache三种,全部只能配置这三种类型的CacheClient,以下:
内置本地缓存是用Map实例,线程安全,但由于跟应用使用同一块堆内存,缓存数据量过大时可能会溢出,请谨慎使用
本地缓存客户端的实现类是:SimpleLocalCacheClient,示例以下:
<bean id="localCacheClient" class="com.jad.cache.common.impl.SimpleLocalCacheClient">
<property name="clientName" value="localCacheClient" />
</bean>
以上配置中的clientName属性表示此CacheClient实例的名称,它是能够缺省的,缺省配置时,与此beanr的id相同。
CacheClient配置好了后,须要将此bean的id配置到上一节CacheClientManager的Bean的cacheClient或cacheClientList属性中,以即可以被CacheClientManager管理。
SimpleLocalCacheClient可用的属性配置以下表:
property |
可否缺省 |
默认值 |
说明 |
clientName |
能 |
默认值它对应Bean的id属性 |
表示指client的名字,当有多个CacheClient实例时,些属性不能重复 |
defActivityTime |
能 |
默认值同对应的CacheClientManger同名属性 |
必须为整数,默认存活时间,大于0是才有效 |
allowNullValues |
能 |
默认值同对应的CacheClientManger同名属性 |
boolean类型,表示它控制的Cache实例可否缓存空值 |
autoCreateCache |
能 |
默认值同对应的CacheClientManger同名属性 |
boolean类型,表示此客户端可否自动建立Cache实例 |
autoStart |
能 |
true |
是否自动启动,为true时,在此bean被初始化时自动启动 |
cacheNames |
能 |
缺省为空列表 |
若是缺省,在单客户端管理器的状况下,全部Cache实例所有被这惟的CacheClient实例管理。在多客户端管理器的状况,若是此客户端为默认客户端,则用它自动建立缓存实例并管理它,不然它不起任何做用。 |
EhCache缓存客户端的实现类是:EhcacheClient,示例以下:
<bean id="ehcacheClient" class=" com.jad.cache.ehcache.EhcacheClient">
</bean>
EhcacheClient可用的属性配置以下表:
property |
可否缺省 |
默认值 |
说明 |
configFile |
能 |
ehcache.xml |
ehcache配置文件名 |
clientName |
能 |
默认值它对应Bean的id属性 |
表示指client的名字,当有多个CacheClient实例时,些属性不能重复 |
defActivityTime |
能 |
默认值同对应的CacheClientManger同名属性 |
必须为整数,默认存活时间,大于0是才有效 |
allowNullValues |
能 |
默认值同对应的CacheClientManger同名属性 |
boolean类型,表示它控制的Cache实例可否缓存空值 |
autoCreateCache |
能 |
默认值同对应的CacheClientManger同名属性 |
boolean类型,表示此客户端可否自动建立Cache实例 |
autoStart |
能 |
true |
是否自动启动,为true时,在此bean被初始化时自动启动 |
cacheNames |
能 |
缺省为空列表 |
若是缺省,在单客户端管理器的状况下,全部Cache实例所有被这惟的CacheClient实例管理。在多客户端管理器的状况,若是此客户端为默认客户端,则用它自动建立缓存实例并管理它,不然它不起任何做用。 |
说明:从上表中可看出,EhcacheClient可用的属性配置同上节的SimpleLocalCacheClient可用的属性配置其乎同样,惟一不一样的是多了一个configFile属性,以指定EhCache使用的配置文件。
MemCache缓存客户端的实现类是:MemCacheClient,示例以下:
<bean id="memcacheClient" class=" com.jad.cache.memcache.MemCacheClient">
<property name="masterCacheName" value="masterCache2" />
</bean>
EhcacheClient可用的属性配置以下表:
property |
可否缺省 |
默认值 |
说明 |
configFile |
能 |
memcache.xml |
memcache配置文件名 |
clientName |
能 |
默认值它对应Bean的id属性 |
表示指client的名字,当有多个CacheClient实例时,些属性不能重复 |
defActivityTime |
能 |
默认值同对应的CacheClientManger同名属性 |
必须为整数,默认存活时间,大于0是才有效 |
allowNullValues |
能 |
默认值同对应的CacheClientManger同名属性 |
boolean类型,表示它控制的Cache实例可否缓存空值 |
autoCreateCache |
能 |
默认值同对应的CacheClientManger同名属性 |
boolean类型,表示此客户端可否自动建立Cache实例 |
autoStart |
能 |
true |
是否自动启动,为true时,在此bean被初始化时自动启动 |
cacheNames |
能 |
缺省为空列表 |
若是缺省,在单客户端管理器的状况下,全部Cache实例所有被这惟的CacheClient实例管理。在多客户端管理器的状况,若是此客户端为默认客户端,则用它自动建立缓存实例并管理它,不然它不起任何做用。 |
masterCacheName |
能 |
masterCache |
指定memcache.xml配置文件中的一个client的name做为主要的Cache,在autoCreateCache及multiplexMasterCache同时为true时有效。 |
onlyLocal |
能 |
false |
是否仅使用本地缓存。MemCache自身有一个本地缓存实现,若是当前MemCache服务器尚未准备好,能够暂时使用它自带的本地缓存。 |
multiplexMasterCache |
能 |
true |
是否复用主缓存。 |
responseStatInterval |
能 |
0 |
默认不进行响应统计。 |
上表中红色部分是MemCache中特有的属性,其具体做用可参本档附带的与MemCache集成相关的文档。
本框架的配置整体上比较简单,可是比较灵活,并且不少参数均可以缺省配置,如下跟据不一样的业务场景提供了几种极简的默认配置,开发人员能够在这个基础上进行配置。
<cache:annotation-driven key-generator="keyGenerator"/>
<bean id="keyGenerator" class="com.jad.cache.common.SimpleCacheKeyGenerator" />
<bean id="cacheClientManager" class="com.jad.cache.common.impl.SingleClientManager">
<property name="cacheClient" ref="ehcacheClient" />
</bean>
<bean id="ehcacheClient" class=" com.jad.cache.ehcache.EhcacheClient">
</bean>
<cache:annotation-driven key-generator="keyGenerator"/>
<bean id="keyGenerator" class="com.jad.cache.common.SimpleCacheKeyGenerator" />
<bean id="cacheClientManager" class="com.jad.cache.common.impl.SingleClientManager">
<property name="cacheClient" ref=" memcacheClient" />
</bean>
<bean id="memcacheClient" class=" com.jad.cache.memcache.MemCacheClient">
</bean>
<cache:annotation-driven key-generator="keyGenerator"/>
<bean id="keyGenerator" class="com.jad.cache.common.SimpleCacheKeyGenerator" />
<bean id="cacheClientManager" class="com.jad.cache.common.impl.MultiClientManager"> <property name="defCacheClientName" value="ehcacheClient" />
<property name="cacheClientList">
<list>
<ref bean="ehcacheClient"/>
<ref bean="memcacheClient"/>
</list>
</property>
</bean>
<bean id="ehcacheClient" class=" com.jad.cache.ehcache.EhcacheClient">
<property name="cacheNames">
<set>
<value>ehCache1</value>
<value>ehCache2</value>
</set>
</property>
</bean>
<bean id="memcacheClient" class=" com.jad.cache.memcache.MemCacheClient">
<property name="masterCacheName" value="memCache1" />
<property name="cacheNames">
<set>
<value>memCache1</value>
<value>memCache2</value>
</set>
</property>
</bean>
注解方式跟使用SpringCache自身的缓存注解方式如出一辙,这里再也不介绍。
本框架两个两个类做为开放的操做缓存的api,分别是:
com.jad.cache.common.api.CacheClientHelper和com.jad.cache.common.api.CacheHelper
其中CacheClientHelper类操做缓存客户端实例的启停,CacheHelper类能够从给定名称的Cache中读取缓存数据。
CacheClientHelper经常使用的方法以下:
getInstance() 得到此类的实例(此类的构造函数已经私有化了,须要经过此方法来得到它的实例)。
init(MasterCacheManager) 初始化,这个方法系统会自动调用,开发人员无需理会
getClientNames() 得到系统中全部缓存客户端的名称列表
start(String) 启动一个客户端,参数为客户端名称
stop(String) 中止一个客户端,参数为客户端名称
isStarted(String) 检查客户端是否启动,参数为客户端名称
getInstance(String) 跟据缓存名称得到此类的实例(此类的构造函数已经私有化了,须要经过此方法来得到它的实例),参数为须要操做的 Cache的名称。
get(String)从缓存中读取数,参数为key
put(String, Serializable)往缓存中插入数据
put(String, Serializable, int) 往缓存中插入数据,并指定存活时间
evict(String)跟据key从缓存中删除数据
clear()清空缓存数据
本框架源码中每一个模块都有对应的单元测试类,代码在src/test/java下面,配置在src/test/resources。本人是经过testng进行测试的,建议开发人员安装testng插件进行测试。
本框架采用log4j输出日志,配置以下:
#阿里memcache
log4j.logger.com.alisoft.xplatform.asf.cache=ERROR
#ehcache
log4j.logger.net.sf.ehcache=ERROR
以上两行分别是阿里memcache 客户端中的日志配置以及ehcache的配置
跟本框架相关的日志配置以下
#jad-cache-api
log4j.logger.com.jad.cache.common=DEBUG
#jad-cache-ehcache
log4j.logger.com.jad.cache.ehcache=DEBUG
#jad-cache-memcache
log4j.logger.com.jad.cache.memcache=DEBUG
其它具体的详细配置可参见源码的测试用例,开发人员可跟据本身的须要来指定相应的日志输出级别。
更多信息,请关注本人公众号: