您的位置:首页 > 其它

配置缓存方案

2012-01-11 22:50 288 查看
5.7.1 配置缓存方案

虽然Spring Modules会提供一个代理来拦截方法并把结果保存到缓存,它并没有提供一个实际的缓存解决方案,而是要依赖于第三方的缓存方案。可以使用的方案有多个,包括:

EHCache

GigaSpaces

JBoss Cache

JCS

OpenSymphony的OSCache

Tangosol的Coherence

我们为RoadRantz程序选择EHCache,主要是因为我以前使用它的经验及能够从www.ibibio.org的Maven仓库轻易获得。无论使用哪个缓存方案,对于Spring Modules Cache的配置基本上都是一样的。

首先要做的是新建一个Spring配置文件来声明缓存。虽然可以把Spring Modules Cache配置放到RoadRantz程序加载的任意一个Spring上下文配置文件里,但最好还是把它们分开,所以我们要创建roadrantz-cache.xml来保存缓存的配置。

与Spring上下文配置文件一样,roadrantz-cache.xml也以<beans>元素为根。但为了利用Spring Modules对EHCache的支持,我们要让<beans>元素能够识别ehcache命名空间:





我们为RoadRantz程序选择的是EHCache,如果想使用其他缓存方案,需要把Spring Modules命名究竟和规划声明修改为相应的内容。表5.6列出了每个命名空间及其URI和规划URI。

表5.6 Spring Modules所支持的缓存方案的命名空间及规划

命名空间

命名空间URI

规划URI

ehcache

http://www.springmodules.org/schema/ehcache

http://www.springmodules.org/schema/cache/springmodules- ehcache.xsd

gigaspaces

http://www.springmodules.org/ schema/gigaspaces

http://www.springmodules.org/schema/cache/springmodules- gigaspaces.xsd

jboss

http://www.springmodules.org/ schema/jboss

http://www.springmodules.org/schema/cache/springmodules- jboss.xsd

jcs

http://www.springmodules.org/ schema/jcs

http://www.springmodules.org/schema/cache/springmodules-jcs.xsd

oscache

http://www.springmodules.org/schema/oscache

http://www.springmodules.org/schema/cache/springmodules- oscache.xsd

tangosol

http://www.springmodules.org/schema/tangosol

http://www.springmodules.org/schema/cache/springmodules- tangosol.xsd

无论选择哪种缓存,都可以使用一些Spring配置元素在Spring里对缓存进行配置。表5.7列出了这些元素。

表5.7 Spring Modules的配置元素

配 置 元 素

用 途

<namespace:annotations>

以Java 5注解来声明被缓存的方法

<namespace:commons-attributes>

以Jakarta通用属性元素数据来声明被缓存的方法

<namespace:config>

在Spring XML里配置缓存方案

<namespace:proxy>

在Spring XML里声明一个代理来声明被缓存的方法

在使用EHCache作为缓存方案时,需要告诉Spring到哪里寻找EHCache配置文件 ,这正是<ehcache:config>元素的用途所在:



在此对configLocation属性的设置告诉Spring从程序类路径的根位置加载EHCache的配置。

配置EHCache

我们已经配置了ehcache.xml文件,如程序清单5.12所示。

 

程序清单5.12 在ehcache.xml里配置EHCache。



在这段代码里,我们配置了两个缓存让EHCache进行管理。<defulatCache>元素是必须有的,描述了在没有找到其他缓存情况下所使用的缓存。<cache>元素定义了另一个缓存,可以在ehcache.xml里出现0次或多次(每次针对定义的一个缓存)。在此,我们只定义了rantzCache作为惟一的非默认缓存。

<defaultCache>和<cache>里指定的属性描述了缓存的行为。表5.8列出在配置EHCache缓存时可以使用的属性。

表5.8 EHCache的缓存配置属性

属 性

用 于 指 定

diskExpiryThreadIntervalSeconds

磁盘过期线程运行的频率(以秒为单位),也就是磁盘存留

的缓存清理过期项目的频率(默认是120秒)。

diskPersistent

磁盘缓存在VM重新启动时是否保持(默认为false)。

eternal

元素是否永恒。如果是永恒的,就永远不会过期(必须设置)。

maxElementsInMemory

内存能够被缓存的最大元素数量(必须设置)。

memoryStoreEvictionPolicy

当达到maxElementsInMemory时,如何强制进行驱逐。

默认使用“最近使用(LRU)”策略,还可以使用“先入先出

(FIFO)”和“较少使用(LFU)”策略。(默认是LRU。)

name

缓存的名称。(对于<cache>必须设置。)

overflowToDisk

当内存缓存达到maxElementsInMemory时,是否可以溢出

到磁盘。(必须设置。)

timeToIdleSeconds

导致元素过期的访问间隔(以秒为单位)。设置为0表示元

素可以永远空闲。(默认值是0。)

timeToLiveSeconds

元素在缓存里可以存在的时间(以秒为单位)。设置为0

表示元素可以在缓存里永远存在而不过期。(默认值是0。)

对于RoadRantz程序,我们配置了一个默认缓存(这是EHCache要求的),还配置了一个名为rantzCache的缓存作为主缓存。两个缓存都设置为最多可以容纳500个元素(不过期),访问频率最低的元素会被踢出,不允许磁盘溢出 。

在Spring程序上下文里配置的EHCache之后,就可以声明哪个Bean和方法应该对结果进行缓存。首先,我们来声明一个代理来缓存RoadRantz DAO层里方法的返回值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: