配置缓存方案
来源:互联网 发布:网络摄像机 编辑:程序博客网 时间:2024/05/16 06:22
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层里方法的返回值。
- 配置缓存方案
- 缓存方案
- 数据库(3):配置数据缓存方案,其他形式
- CAS集群部署基于Redis缓存配置详细方案
- js缓存更新方案
- js缓存更新方案
- Web缓存(Varnish方案)
- Web缓存(Varnish方案)
- iOS缓存方案
- iOS缓存方案
- OSCache缓存方案
- iOS缓存方案
- 数据缓存方案
- 禁止浏览器缓存方案
- 缓存方案之Redis
- Android数据缓存方案
- 缓存方案之Redis
- iOS缓存方案
- c#与IDL混合编程处理二维数组传递的处理方法
- Objective-C 语法之字符串 NSMutableString
- Session案例,显示商品浏览记录
- Android 命令行手动编译打包详解
- QT4使用QSS截取图片
- 配置缓存方案
- 缓存的代理Bean
- Linux /dev目录详解和Linux系统各个目录的作用
- JAR文件包及jar命令详解
- 函数的覆盖
- 在Unity3D中使用ScriptableObject进行序列化
- java 网络编程 UDP
- Monostate模式——兼谈Singleton模式
- 注解驱动的缓存