首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Ehcache 运用

2012-08-30 
Ehcache 使用Cache的配置很灵活,官方提供的Cache配置方式有好几种。你可以通过声明配置、在xml中配置、在程序

Ehcache 使用
Cache的配置很灵活,官方提供的Cache配置方式有好几种。你可以通过声明配置、在xml中配置、在程序里配置或者调用构造方法时传入不同的参数。

你可以将Cache的配置从代码中剥离出来,也可以在使用运行时配置,所谓的运行时配置无非也就是在代码中配置。以下是运行时配置的好处:

·   在同一个地方配置所有的Cache,这样很容易管理Cache的内存和磁盘消耗。
·   发布时可更改Cache配置。
·   可再安装阶段就检查出配置错误信息,而避免了运行时错误。



在我的项目中:
spring中定义ehcache支持:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:ehcache="http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring/ehcache-spring-1.1.xsd"><ehcache:annotation-driven />        <ehcache:config cache-manager="cacheManager">        <ehcache:evict-expired-elements interval="60" />    </ehcache:config>        <bean id="cacheManager"  value="classpath:cache/ehcache.xml"/>    </bean>        <bean id="productKeyGenerator" name="code"><?xml version="1.0" encoding="UTF-8"?><ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"><diskStore path="user.home/web_ehcache/" />     <defaultCache            maxElementsInMemory="3000"            eternal="false"            timeToIdleSeconds="3600"            timeToLiveSeconds="3600"            overflowToDisk="true"            diskSpoolBufferSizeMB="20"            maxElementsOnDisk="100"            diskPersistent="false"            diskExpiryThreadIntervalSeconds="100"            memoryStoreEvictionPolicy="LRU"            />    <cache name="AAACache"           maxElementsInMemory="3000"           maxElementsOnDisk="7000"           eternal="false"           overflowToDisk="true"           diskSpoolBufferSizeMB="20"           timeToIdleSeconds="3600"           timeToLiveSeconds="3600"           memoryStoreEvictionPolicy="LFU"            /></ehcache> 


defaultCache是默认的缓存配置,AAACache是我自己定义的缓存策略,里面各个properties的含义可以自己去查资料很清楚,上面的diskStore path是缓存文件简历的目录,user.home是使用的系统的变量,就是你这个用户的文件夹,such as : C:\Documents and Settings\user\My Documents\...

缓存实际对反复查询的条件返回的一个结果进行缓存,而缓存的KEY,也是缓存的凭据一般就是使用这些查询的条件,这里我们可以定制我们的缓存KEY,可以从我的spring的配置文件中查询得到我定义了一个productKeyGenerator。 这个东西就是用来针对product查询生成缓存key的一个key生成器。

public class ProductCacheKeyGenerator implements CacheKeyGenerator<Serializable> {@Overridepublic Serializable generateKey(MethodInvocation methodInvocation) {String product = String.format("product_of_%s", methodInvocation.getArguments()[0]);return product;}@Overridepublic Serializable generateKey(Object... data) {// TODO Auto-generated method stubreturn null;}}


这样所有生成的缓存关于查询product的进这个缓存key生成器的都会给它的缓存取一个名字叫product_of_%s %s这里就是传过来的参数的第一个值。

最后看看怎么在后台的数据访问层使用这个缓存和缓存KEY生成器:
@Cacheable(cacheName="AAACache",keyGeneratorName="productKeyGenerator" )public List<Product> listProductsByRegion(String regionId);


这里的keyGeneratorName就是我spring里面配置的这个KEY生成器的BEAN ID。CACHENAME就是我要应用的缓存策略,你可以理解为就是个性缓存。

这样缓存配置就完成了,在应用这个操作的时候,如果你给listProductsByRegion方法传递的参数是'ABC',你可以发现后台日志会记录生成一个product_of_ABC的缓存数据。以后在策略配置的范围内每调用这个方法都会应用到生成的这个缓存。







热点排行