一.介绍与应用场景
ehcache是一开源缓存工具,其许可证为Apache License, Version 2.0,非常友好的许可。在 sourceforge.net 上可找到它的最新版本。
缓存应用在多个领域并发挥作用,ehcache可应用于数据库访问缓存,安全认证缓存,web缓存,soap 和 RESTFul 服务缓存,应用程序持久对象缓存以及分布式缓存。
二.架设开发环境
无它,只需把ehcache的相关jar包放到classpath下,把配置文件ehcache.xml放在classpath下就可以进行应用开发了。下面是配置文件中默认配置的xml节点的内容
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
diskSpoolBufferSizeMB="30"
maxElementsOnDisk="10000000"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"
/>
原文件中有比较详尽的注释,在这里我简单翻译几个
1.必须要有的属性:
name: cache的名字,用来识别不同的cache,必须惟一。
maxElementsInMemory: 内存管理的缓存元素数量最大限值。
maxElementsOnDisk: 硬盘管理的缓存元素数量最大限值。默认值为0,就是没有限制。
eternal: 设定元素是否持久话。若设为true,则缓存元素不会过期。
overflowToDisk: 设定是否在内存填满的时候把数据转到磁盘上。
2.下面是一些可选属性:
timeToIdleSeconds: 设定元素在过期前空闲状态的时间,只对非持久性缓存对象有效。默认值为0,值为0意味着元素可以闲置至无限长时间。
timeToLiveSeconds: 设定元素从创建到过期的时间。其他与timeToIdleSeconds类似。
diskPersistent: 设定在虚拟机重启时是否进行磁盘存储,默认为false.(我的直觉,对于安全小型应用,宜设为true)。
diskExpiryThreadIntervalSeconds: 访问磁盘线程活动时间。
diskSpoolBufferSizeMB: 存入磁盘时的缓冲区大小,默认30MB,每个缓存都有自己的缓冲区。
memoryStoreEvictionPolicy: 元素逐出缓存规则。共有三种,Recently Used (LRU)最近最少使用,为默认。 First In First Out (FIFO),先进先出。Less Frequently Used(specified as LFU)最少使用。
三.实例编写
继续以往的作风,用代码说话。代码中有良好的注释。(代码参考字官方文档)
1. 使用 CacheManager
package tutorial;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URL;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
/**
* 使用 CacheManager
* @author zhangyt
*
*/
public class UsingTheCacheManager {
public static void main(String[] args) throws Exception {
//1.
//创建CacheManager单例对象,使用默认配置
CacheManager.create();
String[] cacheNames1 = CacheManager.getInstance().getCacheNames();
//关闭
CacheManager.getInstance().shutdown();
//2.
//用默认配置创建对象可用此创建多例
CacheManager manager2 = new CacheManager();
String[] cacheNames2 = manager2.getCacheNames();
manager2.shutdown();
//3.加载配置的方式
//3.1 用默认配置加载在上面已经提到。即需要在classpath下放置ehcache.xml配置文件
//3.2 用指定配置文件路径的方式创建
CacheManager manager31 = new CacheManager("src/config/ehcache.xml");
manager31.shutdown();
//3.2 用classpath下的配置文件生成
URL url = UsingTheCacheManager.class.getClassLoader().getResource("config/ehcache.xml");
CacheManager manager32 = new CacheManager(url);
manager32.shutdown();
//3.3 通过输入流生成
InputStream fis = new FileInputStream(new File("src/config/ehcache.xml").getAbsolutePath());
try {
CacheManager manager33 = new CacheManager(fis);
manager33.shutdown();
} finally {
fis.close();
}
//4. 以编程的方式添加和删除cache
CacheManager singletonManager4 = CacheManager.create();
//4.1 用默认配置添加
singletonManager4.addCache("test41");
Cache test41 = singletonManager4.getCache("test41");
System.out.println(test41 != null);
//4.2 创建一个cache并添加到CacheManager
Cache memoryOnlyCache = new Cache("test42", 5000, false, false, 5, 2);
singletonManager4.addCache(memoryOnlyCache);
Cache test42 = singletonManager4.getCache("test42");
//4.3 删除cache
singletonManager4.removeCache("sampleCache1");
singletonManager4.shutdown();
}
}
2. 使用 Caches
package tutorial;
import java.io.Serializable;
import java.lang.management.ManagementFactory;
import javax.management.MBeanServer;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;
import net.sf.ehcache.management.ManagementService;
/**
* 使用 Caches
* @author zhangyt
*
*/
public class UsingCaches {
public static void main(String[] args) {
CacheManager.create();
CacheManager manager= CacheManager.getInstance();
//1.取得Cache
Cache cache = manager.getCache("sampleCache1");
//2.执行 CRUD 操作
//2.1 增加元素
Element element1 = new Element("key1", "value1");
Element element2 = new Element("key2", "value2");
cache.put(element1);
cache.put(element2);
//2.2 更新元素
cache.put(new Element("key1", "value1u"));
//2.3 取值
//取得一个序列化了的值
Element element231 = cache.get("key1");
Serializable value231 = element231.getValue();
System.out.println(value231);
//取得一个不是序列化的值
Element element232 = cache.get("key1");
Object value232 = element232.getObjectValue();
System.out.println(value232);
//3.4 删除一个元素
cache.remove("key2");
System.out.println(cache.get("key2") == null);
//3. 强硬命令写入硬盘
cache.flush();
//4. 取得缓存的大小
//得到总的缓存数目
int elements = cache.getSize();
System.out.println(elements);
//得到在内存中的元素数量
long elementsInMemory = cache.getMemoryStoreSize();
System.out.println(elementsInMemory);
//得到硬盘中的缓存元素数量
long elementsInDisk = cache.getDiskStoreSize();
System.out.println(elementsInDisk);
/**
* 在官方文档中有cache.getHitCount();等相关方法,在这里已经找不到
* 应该是版本变迁的原因。
*/
//5.高级主题 注册mbean 也许在以后的高级主题中会进一步阐述
CacheManager manager1 = new CacheManager();
MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
ManagementService.registerMBeans(manager1, mBeanServer, false, false, false, true);
manager.shutdown();
}
}
看了以上的内容,相信对ehcache就可以进行一般的应用了,更高级的主题,也许在以后探讨。
分享到:
相关推荐
ehcache1.6,ehcache-web-2.0.4,slf4j-api-1.7.21.jar 不好意思,缺点分用。。
1.解压缩到目录下,复制ehcache-monitor-kit-1.0.0\lib\ehcache-probe-1.0.0.jar包到application的web-inf/lib目录下 2.将以下配置copy的ehcache.xml文件的ehcache标签中,注:上述链接中说的配置少写了个probe包名...
具有集群支持的 Ehcache 3(ehcache-clustered-3.8.1-kit.zip)
ehcache-core-2.6.10.jar依赖包 MyBatiesEhCache二级缓存 Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个...
赠送jar包:ehcache-web-2.0.4.jar; 赠送原API文档:ehcache-web-2.0.4-javadoc.jar; 赠送源代码:ehcache-web-2.0.4-sources.jar; 赠送Maven依赖信息文件:ehcache-web-2.0.4.pom; 包含翻译后的API文档:...
赠送jar包:ehcache-core-2.6.11.jar; 赠送原API文档:ehcache-core-2.6.11-javadoc.jar; 赠送源代码:ehcache-core-2.6.11-sources.jar; 赠送Maven依赖信息文件:ehcache-core-2.6.11.pom; 包含翻译后的API文档...
赠送jar包:ehcache-3.9.9.jar; 赠送原API文档:ehcache-3.9.9-javadoc.jar; 赠送源代码:ehcache-3.9.9-sources.jar; 赠送Maven依赖信息文件:ehcache-3.9.9.pom; 包含翻译后的API文档:ehcache-3.9.9-javadoc-...
赠送jar包:ehcache-core-2.6.11.jar; 赠送原API文档:ehcache-core-2.6.11-javadoc.jar; 赠送源代码:ehcache-core-2.6.11-sources.jar; 赠送Maven依赖信息文件:ehcache-core-2.6.11.pom; 包含翻译后的API文档...
赠送jar包:shiro-ehcache-1.4.0.jar; 赠送原API文档:shiro-ehcache-1.4.0-javadoc.jar; 赠送源代码:shiro-ehcache-1.4.0-sources.jar; 赠送Maven依赖信息文件:shiro-ehcache-1.4.0.pom; 包含翻译后的API文档...
Mybatis-ehcache 1.2.1源码(ehcache-cache-mybatis-ehcache-1.2.1.tar.gz)
用于ehcache-core-ee-2.4.1 企业级功能。比如ehcache的offheapsize设置
Ehcache 2.10.8(bigmemory-max-4.3.8.4.2.tar.gz)
ehcache-spring-annotations-1.2.0.jar
赠送jar包:ehcache-web-2.0.4.jar; 赠送原API文档:ehcache-web-2.0.4-javadoc.jar; 赠送源代码:ehcache-web-2.0.4-sources.jar; 赠送Maven依赖信息文件:ehcache-web-2.0.4.pom; 包含翻译后的API文档:...
ehcache-spring-annotations-1.1.2.jar
Mybatis-ehcache 1.2.1源码(ehcache-cache-mybatis-ehcache-1.2.1.zip)
含有 三个版本:ehcache-core-2.6.11 ;ehcache-core-2.6.9;ehcache-core-2.5.0
它大大简化了在Spring应用中基于业界使用广泛的Ehacche-2.0版本实现缓存的技术,1.1.2版本的ehcache-spring-annotations刚刚发布不久,在本文中,我将会介绍如何在一个web工程时使用ehcache-spring-annotations实现...
ehcache缓存jar(ehcache-core-2.4.6.jar+ehcache-web-2.0.4.jar)
赠送jar包:ehcache-3.3.1.jar; 赠送原API文档:ehcache-3.3.1-javadoc.jar; 赠送源代码:ehcache-3.3.1-sources.jar; 赠送Maven依赖信息文件:ehcache-3.3.1.pom; 包含翻译后的API文档:ehcache-3.3.1-javadoc-...