EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,
是Hibernate中默认的CacheProvider。
ehcache是一个非常轻量级的缓存实现,而且从1.2之后就支持了集群,
而且是hibernate默认的缓存provider。
Ehcache的分布式缓存有传统的RMI,1.5版的JGroups,1.6版的JMS。
分布式缓存主要解决集群环境中不同的服务器间的数据的同步问题。
使用Spring的AOP进行整合,可以灵活的对方法的返回结果对象进行缓存。
CachingFilter功能可以对HTTP响应的内容进行缓存。
1、主要特性
1. 快速.
2. 简单.
3. 多种缓存策略
4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题
5. 缓存数据会在虚拟机重启的过程中写入磁盘
6. 可以通过RMI、可插入API等方式进行分布式缓存
7. 具有缓存和缓存管理器的侦听接口
8. 支持多缓存管理器实例,以及一个实例的多个缓存区域
9. 提供Hibernate的缓存实现
=======================================
Cache 存储方式 :内存或磁盘
1. EHCache 的特点,是一个纯Java ,过程中(也可以理解成插入式)缓存实现,单独安装Ehcache
需把ehcache-X.X.jar 和相关类库方到classpath中。如项目已安装了Hibernate ,则不需要做什么。。直接可以使用Ehcache
使用:
1.创建CacheManager有4种方式
A.使用默认配置文件创建
CacheManager manager = CacheManager.create();
B.使用指定配置文件创建
CacheManager manager = CacheManager.create("src/config/ehcache.xml");
C.从classpath中找寻配置文件并创建
URL url = getClass().getResource("/anothername.xml");
CacheManager manager = CacheManager.create(url);
D:通过输入流创建
InputStream fis = new FileInputStream(new File("src/config/ehcache.xml").getAbsolutePath());
try{
manager=CacheManager.create(fis);
}finally{
fis.close();
}
卸载CacheManager ,关闭Cache
manager.shutdown();
使用Caches
// 取得配置文件中预先 定义的sampleCache1设置,通过CacheManager生成一个Cache
Cache cache = manager.getCache("sampleCache1");
// 设置一个名为test 的新cache,test属性为默认
CacheManager manager = CacheManager.create();
manager.addCache("test");
// 设置一个名为test 的新cache,并定义其属性
CacheManager manager = CacheManager.create();
Cache cache=new Cache("test", 1, true, false, 5, 2);
manager.addCache(cache);
// 往cache中加入元素
Element element = new Element("key1", "value1");
cache.put(new Element(element);
// 从cache中取得元素
Element element = cache.get("key1");
所以大概步骤为:
第一步:生成CacheManager对象
第二步:生成Cache对象
第三步:向Cache对象里添加由key,value组成的键值对的Element元素
下面是一个具体的例子
package test;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;
/**
* 第一步:生成CacheManager对象
* 第二步:生成Cache对象
* 第三步:向Cache对象里添加由key,value组成的键值对的Element元素
* @author mahaibo
*
*/
public class Test {
public static void main(String[] args) {
//指定ehcache.xml的位置
String fileName="E:\\1008\\workspace\\ehcachetest\\ehcache.xml";
CacheManager manager = new CacheManager(fileName);
//取出所有的cacheName
String names[] = manager.getCacheNames();
for(int i=0;i<names.length;i++){
System.out.println(names[i]);
}
//根据cacheName生成一个Cache对象
//第一种方式:
Cache cache=manager.getCache(names[0]);
//第二种方式,ehcache里必须有defaultCache存在,"test"可以换成任何值
// Cache cache = new Cache("test", 1, true, false, 5, 2);
// manager.addCache(cache);
//向Cache对象里添加Element元素,Element元素有key,value键值对组成
cache.put(new Element("key1","values1"));
Element element = cache.get("key1");
System.out.println(element.getValue());
Object obj = element.getObjectValue();
System.out.println((String)obj);
manager.shutdown();
}
}
==================================================
配置文件介绍(普通缓存)
代码:
<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>
配置文件介绍(分布式缓存)
1)RMI集群模式
A、手工发现
需要指定节点发现模式peerDiscovery值为manual,rmiUrls设置为另一台服务器的IP、端口和缓存名等信息。
<cacheManagerPeerProviderFactory
class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
properties="peerDiscovery=manual,
rmiUrls=//192.168.0.12:4567/oschina_cache|//192.168.0.13:4567/oschina_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>
通过编程方式使用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注解在Spring 中使用(ehcache-spring-annotations)
第一步在web.xml中配置加载配置ehcache的配置文件,如
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:config/applicationContext.xml,classpath:config/ehcacheApplication.xml</param-value>
</context-param>
第二部:编写ehcacheApplication.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ehcache="http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring/ehcache-spring-1.1.xsd">
<ehcache:annotation-driven />
<ehcache:config cache-manager="cacheManager">
</ehcache:config>
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="classpath:config/ehcache.xml"/>
</bean>
《!--缓存的生成key--》
<bean id="productKeyGenerator" class="lwz.web.ehcache.ProductCacheKeyGenerator"/>
</beans>
第三部:ehcache.xml
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">
<diskStore path="user.home/web_ehcache/" />
<defaultCache
maxElementsInMemory="3000"
eternal="false"
timeToIdleSeconds="3600"
timeToLiveSeconds="3600"
overflowToDisk="true"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="100"
memoryStoreEvictionPolicy="LRU"
/>
<cache name="testCache"
maxElementsInMemory="3000"
eternal="false"
overflowToDisk="true"
timeToIdleSeconds="36000"
timeToLiveSeconds="36000"
memoryStoreEvictionPolicy="LFU"
/>
</ehcache>
第四部
然偶在dao的接口,或者类方法上加上@cacheable注解
@Cacheable(cacheName = "testCache")
public List<ApplicationMenu> findAllMenuValid(String flag);
记得最好不要在control类中的方法加上@Cacheable(cacheName = "testCache"),然后在方法内再去调用dao中的方法,这样缓存不到
如果要更新缓存 在方法上注释
@TriggersRemove(cacheName="testCache",removeAll=true)
public void deleteMenu(int id);
即删除缓存
相关推荐
EHCache缓存的说明文档是到处找来的内容,都有参考链接指向原地址。有三个测试项目也在里面:一个整合了Struts2或Hibernate,一个整合了MyBatis3,这两个是我做的;另一个ehcachetest是下载了別人的。
### Ehcache 使用详解 #### 一、概述 Ehcache 是一款开源的、纯 Java 缓存框架,它能够提供高性能、低延迟的数据缓存功能。Ehcache 的设计目标是提高应用程序性能,通过减少对数据库或其他外部系统的依赖来达到这...
在本文中,我们将深入探讨Ehcache的功能实现以及如何与Spring框架进行集成,同时通过两个项目实例——`TestEhcacheSpring.zip`和`TestEhcache.zip`来具体说明。 ### Ehcache核心功能 1. **缓存管理**: Ehcache允许...
接下来,我们将详细讨论Ehcache的基本配置、缓存操作、与Spring和Hibernate的集成,以及相关的配置说明。 1. Ehcache基本配置 Ehcache的配置主要通过`ehcache.xml`文件进行。在该文件中,你可以定义多个缓存区域...
Hibernate+EhCache 配置及使用说明详解 EhCache 是 Hibernate 的二级缓存技术之一,可以把查询出来的数据存储在内存或者磁盘,节省下次同样查询语句再次查询数据库,大幅减轻数据库压力。 EhCache 的使用注意点: ...
EhCache的特点包括:快速存取、内存管理、支持持久化和缓存过期策略等。在集群环境中,EhCache通过RMI(远程方法调用)或JGroups协议实现节点间的通信,保证了缓存数据的一致性。 二、EhCache在集群环境中的应用 1....
Ehcache的存储方式分为内存和磁盘两层,因此即使内存满载,数据也能持久化到磁盘,避免了容量限制的问题。在虚拟机重启时,缓存数据会被写入磁盘,保证了数据的持久性。此外,Ehcache还支持通过RMI和插件API进行...
Ehcache 是一个广泛使用的 Java 分布式缓存,适用于一般目的的缓存、Java EE 和轻量级容器。它提供内存和磁盘存储、复制与失效、监听器、缓存加载器、缓存扩展、缓存异常处理器、Gzip 缓存过滤器等功能,极大地增强...
在Ehcache的配置文件中,可以通过一系列参数来精细控制缓存的行为。下面是一些关键配置项及其含义: 1. **`timeToIdleSeconds`** 和 **`timeToLiveSeconds`**:这两个参数用于定义缓存项的有效期限。`...
赠送jar包:ehcache-3.3.1.jar; 赠送原API文档:ehcache-3.3.1-javadoc.jar; 赠送源代码:ehcache-3.3.1-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
- **文档范围**:覆盖了Ehcache的基础概念、配置方法、应用场景,特别是页面级别的缓存处理以及在分布式集群环境下的配置。 - **读者对象**:面向所有希望学习或进一步提高Ehcache使用技巧的技术人员。 #### 二、...
除了EhCache的内置功能,还有其他第三方库或框架如OSCache也提供了gzip压缩的支持,它们可能有不同的配置和使用方式,但原理类似,都是在缓存内容返回给客户端前进行压缩。 值得注意的是,虽然gzip压缩在大部分现代...
- `LICENSE`: 许可证文件,说明软件的使用权限和限制。 了解这些内容后,开发者可以根据需求创建和配置自己的Ehcache实例,利用其强大功能优化应用程序的性能。同时,通过阅读帮助文档,可以深入理解Ehcache的工作...
版本2.10.1是Ehcache的一个重要版本,它提供了多种功能和优化,使得开发人员能够更好地管理和使用缓存。 Ehcache的核心特性包括: 1. **内存管理**:Ehcache使用内存存储来快速访问常用数据,以减少对持久存储(如...
3. 使用说明或文档:可能包括Ehcache和EJB3整合的指南,帮助开发者理解和使用这两个技术。 4. 测试类或示例项目:演示如何在实际应用中部署和测试Ehcache与EJB3的整合。 总的来说,"ehcache-1.2.3 ejb3-persistence...
赠送jar包:ehcache-3.9.9.jar; 赠送原API文档:ehcache-3.9.9-javadoc.jar; 赠送源代码:ehcache-3.9...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。
2. **构建过程**:详细步骤说明如何从源码构建 Ehcache。 #### 四十六、常见问题解答(FAQ) 1. **问题列表**:列出了一些常见的问题。 2. **解答**:提供了这些问题的解答。 以上内容全面覆盖了 Ehcache 的各个...
Terracotta公司是Ehcache的开发者,他们为商业用户提供了一个许可证管理系统,允许用户合法地使用和管理Ehcache的高级特性。此文件可能包含了一个特定的许可证密钥,用于激活和验证Ehcache的使用权限。 "read.txt" ...
提示了“使用复制”、“支持的复制类型”、“复制的最小配置”、“向现有缓存添加复制”、“使用RMI实现复制缓存”、“配置对等提供者”等关键部分,这些部分应该是手册的主体内容,分别阐述了如何实现Ehcache的远程...