设为首页 加入收藏

TOP

使用Spring cache和ehcache之前必须了解的(二)
2015-11-12 23:05:53 来源: 作者: 【 】 浏览:29
Tags:使用 Spring cache ehcache 之前 必须 了解
j。默认是使用proxy。当mode为proxy时,只有缓存方法在外部被调用的时候Spring Cache才会发生作用,这也就意味着如果一个缓存方法在其声明对象内部被调用时Spring Cache是不会发生作用的。而mode为aspectj时就不会有这种问题。另外使用proxy时,只有public方法上的@Cacheable等标注才会起作用,如果需要非public方法上的方法也可以使用Spring Cache时把mode设置为aspectj。此外,还可以指定一个proxy-target-class属性,表示是否要代理class,默认为false。我们前面提到的@Cacheable、@cacheEvict等也可以标注在接口上,这对于基于接口的代理来说是没有什么问题的,但是需要注意的是当我们设置proxy-target-class为true或者mode为aspectj时,是直接基于class进行操作的,定义在接口上的@Cacheable等Cache注解不会被识别到,那对应的Spring Cache也不会起作用了。


需要注意的是只会去寻找定义在同一个ApplicationContext下的@Cacheable等缓存注解。


基于XML配置:



? ? ?


? ? ? ?


? ? ? ?


? ? ? ?


? ? ?


?


上面配置定义了一个名为cacheAdvice的cache:advice,其中指定了将缓存findById方法和find方法到名为users的缓存中。这里的方法还可以使用通配符“*”,比如“find*”表示任何以“find”开始的方法。有了cache:advice之后,我们还需要引入aop命名空间,然后通过aop:config指定定义好的cacheAdvice要应用在哪些pointcut上。如:


1? ?
2
3? ? ?
4
5? ?


二.EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点。


ehcache官网:http://www.ehcache.org/ 可以下载文档看看,里面写的很清楚。


主要的特性有:


1. 快速


2. 简单


3. 多种缓存策略


4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题


5. 缓存数据会在虚拟机重启的过程中写入磁盘


6. 可以通过RMI、可插入API等方式进行分布式缓存


7. 具有缓存和缓存管理器的侦听接口


8. 支持多缓存管理器实例,以及一个实例的多个缓存区域


9. 提供Hibernate的缓存实现


ehcache.xml:里面的注释写的很清楚了。


? : 当内存缓存中对象数量超过maxElementsInMemory时,将缓存对象写到磁盘缓存中(需对象实现序列化接口)?
? ? : 用来配置磁盘缓存使用的物理路径,Ehcache磁盘缓存使用的文件后缀名是*.data和*.index?
name : "缓存名称,cache的唯一标识(ehcache会把这个cache放到HashMap里)?
maxElementsInMemory? : 缓存最大个数。
eternal="false"? : 对象是否永久有效,一但设置了,timeout将不起作用。 (必须设置)
maxEntriesLocalHeap="1000"? : 堆内存中最大缓存对象数,0没有限制(必须设置)
maxEntriesLocalDisk= "1000"? : 硬盘最大缓存个数。
overflowToDisk="false"? : 当缓存达到maxElementsInMemory值是,是否允许溢出到磁盘(必须设??)(内存不足时,是否启用磁盘缓存。)
diskSpoolBufferSizeMB? : 这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。
diskPersistent="false"? : 磁盘缓存在JVM重新启动时是否保持(默认为false)
?timeToIdleSeconds="0"? : 导致元素过期的访问间隔(秒为单位),即当缓存闲置n秒后销毁。 当eternal为false时,这个属性才有效,0表示可以永远空闲,默认为0
?timeToLiveSeconds="600"? : 元素在缓存里存在的时间(秒为单位),即当缓存存活n秒后销毁. 0 表示永远存在不过期
?memoryStoreEvictionPolicy="LFU" : 当达到maxElementsInMemory时,如何强制进行驱逐默认使用"最近使用(LRU)"策略,其它还有先入先出FIFO,最少使用LFU,较少使用LRU
?diskExpiryThreadIntervalSeconds :磁盘失效线程运行时间间隔,默认是120秒。
?clearOnFlush? : 内存数量最大时是否清除。



? ? ? ? xsi:noNamespaceSchemaLocation="ehcache.xsd"
? ? ? ? updateCheck="true" monitoring="autodetect"
? ? ? ? dynamicConfig="true">
? ?
? ? ? ?
? ? ? ? ? ? ? maxEntriesLocalHeap="10000"
? ? ? ? ? ? eternal="false"
? ? ? ? ? ? overflowToDisk="false"
? ? ? ? ? ? timeToIdleSeconds="120"
? ? ? ? ? ? timeToLiveSeconds="120"
? ? ? ? ? ? diskSpoolBufferSizeMB="30"
? ? ? ? ? ? maxEntriesLocalDisk="10000000"
? ? ? ? ? ? diskExpiryThreadIntervalSeconds="120"
? ? ? ? ? ? memoryStoreEvictionPolicy="LRU">
? ? ? ?
? ?
?
? ? ? ? ? ? ? maxEntriesLocalHeap="10000"
? ? ? ? ? maxEntriesLocalDisk="1000"
? ? ? ? ? eternal="false"
? ? ? ? ? diskSpoolBufferSizeMB="30"
? ? ? ? ? timeToIdleSeconds="300"
? ? ? ? ? timeToLiveSeconds="600"
? ? ? ? ? memoryStoreEvictionPolicy="LFU"
? ? ? ? ? transactionalMode="off">
? ? ? ?
? ?

?


好了,这里只是介绍下Spring cache和ehcache的基础,下一篇我会做下实例,基于AOP的缓存实现,基于注解的缓存实现,还有对页面实现缓存。如有写的不好,请大家指正哈!!


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇如何根据你想要的生活选择第一门.. 下一篇Spring整合ehcache 注解实现查询..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: