Ehcache简介_动力节点Java学院整理
程序员文章站
2024-02-12 15:13:16
使用spring的aop进行整合,可以灵活的对方法的返回结果对象进行缓存。
cachingfilter功能可以对http响应的内容进行缓存。
1、主要特性...
使用spring的aop进行整合,可以灵活的对方法的返回结果对象进行缓存。
cachingfilter功能可以对http响应的内容进行缓存。
1、主要特性
1. 快速.
2. 简单.
3. 多种缓存策略
4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题
5. 缓存数据会在虚拟机重启的过程中写入磁盘
6. 可以通过rmi、可插入api等方式进行分布式缓存
7. 具有缓存和缓存管理器的侦听接口
8. 支持多缓存管理器实例,以及一个实例的多个缓存区域
9. 提供hibernate的缓存实现
10. 等等
2、配置文件介绍(普通缓存)
<ehcache> <!-- 指定一个文件目录,当ehcache把数据写到硬盘上时,将把数据写到这个文件目录下 --> <diskstore path="java.io.tmpdir"/> <!-- 设定缓存的默认数据过期策略 --> <defaultcache maxelementsinmemory="10000" eternal="false" overflowtodisk="true" timetoidleseconds="0" timetoliveseconds="0" diskpersistent="false" diskexpirythreadintervalseconds="120"/> <!-- 设定具体的命名缓存的数据过期策略 cache元素的属性: name:缓存名称 maxelementsinmemory:内存中最大缓存对象数 maxelementsondisk:硬盘中最大缓存对象数,若是0表示无穷大 eternal:true表示对象永不过期,此时会忽略timetoidleseconds和timetoliveseconds属性,默认为false overflowtodisk:true表示当内存缓存的对象数目达到了maxelementsinmemory界限后,会把溢出的对象写到硬盘缓存中。注意:如果缓存的对象要写入到硬盘中的话,则该对象必须实现了serializable接口才行。 diskspoolbuffersizemb:磁盘缓存区大小,默认为30mb。每个cache都应该有自己的一个缓存区。 diskpersistent:是否缓存虚拟机重启期数据 diskexpirythreadintervalseconds:磁盘失效线程运行时间间隔,默认为120秒 timetoidleseconds: 设定允许对象处于空闲状态的最长时间,以秒为单位。当对象自从最近一次被访问后,如果处于空闲状态的时间超过了timetoidleseconds属性值,这个对象就会过期,ehcache将把它从缓存中清空。只有当eternal属性为false,该属性才有效。如果该属性值为0,则表示对象可以无限期地处于空闲状态 timetoliveseconds:设定对象允许存在于缓存中的最长时间,以秒为单位。当对象自从被存放到缓存中后,如果处于缓存中的时间超过了 timetoliveseconds属性值,这个对象就会过期,ehcache将把它从缓存中清除。只有当eternal属性为false,该属性才有效。如果该属性值为0,则表示对象可以无限期地存在于缓存中。timetoliveseconds必须大于timetoidleseconds属性,才有意义 memorystoreevictionpolicy:当达到maxelementsinmemory限制时,ehcache将会根据指定的策略去清理内存。可选策略有:lru(最近最少使用,默认策略)、fifo(先进先出)、lfu(最少访问次数)。 --> <cache name="cache1" maxelementsinmemory="1000" eternal="true" overflowtodisk="true"/> <cache name="cache2" maxelementsinmemory="1000" eternal="false" timetoidleseconds="200" timetoliveseconds="4000" overflowtodisk="true"/> </ehcache>
3、配置文件介绍(分布式缓存)
1)rmi集群模式
a、手工发现
需要指定节点发现模式peerdiscovery值为manual,rmiurls设置为另一台服务器的ip、端口和缓存名等信息。
<cachemanagerpeerproviderfactory class="net.sf.ehcache.distribution.rmicachemanagerpeerproviderfactory" properties="peerdiscovery=manual, rmiurls=//192.168.0.12:4567/bjpowernode_cache|//192.168.0.13:4567/bjpowernode_cache" />
b、自动发现
需要指定节点发现模式peerdiscovery值为automatic自动,同时组播地址可以指定d类ip地址空间,范围从 224.0.1.0 到 238.255.255.255 中的任何一个地址。
<cachemanagerpeerproviderfactory class="net.sf.ehcache.distribution.rmicachemanagerpeerproviderfactory" properties="peerdiscovery=automatic, multicastgroupaddress=230.0.0.1, multicastgroupport=4446, timetolive=32" />
需要在每个cache属性中加入
<cacheeventlistenerfactory class="net.sf.ehcache.distribution.rmicachereplicatorfactory"/> <cache name="democache" maxelementsinmemory="10000" eternal="true" overflowtodisk="true"> <cacheeventlistenerfactory class="net.sf.ehcache.distribution.rmicachereplicatorfactory"/> </cache>
4、通过编程方式使用ehcache
//从classes目录查找ehcache.xml配置文件 cachemanager cachemanager = cachemanager.getinstance(); //从classes目录查找指定名称的配置文件 //cachemanager cachemanager = cachemanager.create(getclass().getresource("/ehcache.xml")); //根据配置文件获得cache实例 cache cache = cachemanager.getcache("cache1"); //清空cache中的所有元素 cache.removeall(); //往cache中添加元素 cache.put(new element("s1", "11111")); cache.put(new element("s2", "22222")); cache.put(new element("s3", "33333")); //从cache中取得元素 element e = cache.get("s3"); system.out.println(e.getvalue()); //卸载缓存管理器 cachemanager.shutdown();
5、页面缓存
在web.xml文件中配置过滤器。此处对test_tag.jsp页面进行缓存。
<filter> <filter-name>testpagecachingfilter</filter-name> <filter-class>net.sf.ehcache.constructs.web.filter.simplepagecachingfilter</filter-class> </filter> <filter-mapping> <filter-name>testpagecachingfilter</filter-name> <url-pattern>/test_tag.jsp</url-pattern> </filter-mapping>
在ehcache.xml文件中配置cache节点。注意:cache的name属性必需为simplepagecachingfilter。
<cache name="simplepagecachingfilter" maxelementsinmemory="10" overflowtodisk="true" eternal="false" timetoidleseconds="100" timetoliveseconds="100" memorystoreevictionpolicy="lfu" />
推荐阅读
-
Ehcache简介_动力节点Java学院整理
-
Java class文件格式之特殊字符串_动力节点Java学院整理
-
HttpServletRequest对象常用功能_动力节点Java学院整理
-
HttpServletResponse乱码问题_动力节点Java学院整理
-
Java过滤器filter_动力节点Java学院整理
-
HttpServletRequest对象简介_动力节点Java学院整理
-
Java class文件格式总结_动力节点Java学院整理
-
Java concurrency之互斥锁_动力节点Java学院整理
-
Java concurrency集合之ConcurrentLinkedQueue_动力节点Java学院整理
-
Java class文件格式之方法_动力节点Java学院整理