EhCache是不错的Java开源缓存模块,Cache的配置很灵活,官方提供的Cache配置方式有好几种。你可以通过声明配置、在xml中配置、在程序里配置或者调用构造方法时传入不同的参数。

你可以将Cache的配置从代码中剥离出来,也可以在使用运行时配置,所谓的运行时配置无非也就是在代码中配置。以下是运行时配置的好处:
1、在同一个地方配置所有的Cache,这样很容易管理Cache的内存和磁盘消耗。
2、发布时可更改Cache配置。
3、可再安装阶段就检查出配置错误信息,而避免了运行时错误。
如下是基本的ehcache.xml

<ehcache>
<diskstore path="java.io.tmpdir"></diskstore>
<defaultcache maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
maxElementsOnDisk="10000000"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"></defaultcache>
</ehcache>

你可以配置defaultCache,可用于所有cache,也可以针对每个cache配置不同的xml,以name属性来区分
cache的属性有如下几个

name:Cache的唯一标识
maxElementsInMemory:内存中最大缓存对象数。
maxElementsOnDisk:磁盘中最大缓存对象数,若是0表示无穷大。
eternal:Element是否永久有效,一但设置了,timeout将不起作用。
overflowToDisk:配置此属性,当内存中Element数量达到maxElementsInMemory时,Ehcache将会Element写到磁盘中。
timeToIdleSeconds:设置Element在失效前的允许闲置时间。仅当element不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。
timeToLiveSeconds:设置Element在失效前允许存活时间。最大时间介于创建时间和失效时间之间。仅当element不是永久有效时使用,默认是0.,也就是element存活时间无穷大。
diskPersistent:是否缓存虚拟机重启期数据。(Server重启时将缓存序列化到本地,后再加载,保证缓存在重启后依然有效)。
diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。
diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。
memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。这里比较遗憾,Ehcache并没有提供一个用户定制策略的接口,仅仅支持三种指定策略,感觉做的不够理想。

下面说下最近使用到的磁盘持久化与加载功能,由于之前使用过程中一般为直接缓存,而最近想到使用diskPersistent来配置本地磁盘持久化,发现了一些常见问题,网上找了很多文章终于得到最终效果。
实现此功能其实非常简单,只用简单的将diskPersistent配置为true,以tomcat为例,在重启时候需要告知EhCache,你要重启了,让EhCache去序列化内容到磁盘,此过程可以自己写监听实现重启时调用CacheManager的shutdown,也可以直接使用EhCache提供的监听类net.sf.ehcache.constructs.web.ShutdownListener,但是有一点需要注意,就是在使用此项功能时,必须保持重启或者关闭Server采用的是正常手段关闭,直接杀进程之类的关闭时完全不生效的。

在配置文件中,则需配置Bootstrapcacheloaderfactory,使用

<BootstrapCacheLoaderFactory class="net.sf.ehcache.store.DiskStoreBootstrapCacheLoaderFactory" properties="bootstrapAsynchronously=true" />

另外,EhCache还提供了分布式的缓存解决方案,以及供开发扩展的API,高级功能,暂时没有使用,有需要可以自行查阅相关资料。