- 浏览: 55077 次
- 性别:
- 来自: 深圳
文章分类
最新评论
一.介绍与应用场景
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"
- />
<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();
- }
- }
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();
manager.addCache("sampleCache1");
- //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();
- }
- }
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就可以进行一般的应用了
CacheManager cacheManager = EhcachePlugIn.getCacheManager();
Cache cache = cacheManager.getCache("sampleCache");
System.out.println("The Key In Cache?:"+cache.isKeyInCache(EHCACHE_KEY));
System.out.println("Cache is :"+cache);
Element result = cache.get(EHCACHE_KEY);
if(null==result)
{
System.out.println("No Data In Ehcache");
List list = new ArrayList();
for(int i=20;i<50;i++)
{
Student student = new Student(26,"kook"+i);
list.add(student);
}
cache.put(new Element(EHCACHE_KEY,list));
cache.flush();
result = cache.get(EHCACHE_KEY);
}
List ehcacheList = (List)result.getValue();
Iterator iter = ehcacheList.iterator();
while (iter.hasNext()) {
Student element = (Student) iter.next();
System.out.println("Studeng name is:"+element.getName());
}
相关推荐
cache、ehcache等缓存使用,实现存对象读对象等等
当我们不指定具体其他第三方实现的时候,Spring Boot的Cache模块会...而实际生产使用的时候,因为我们可能需要更多其他特性,往往就会采用其他缓存框架,所以接下来我们会分几篇分别介绍几个常用优秀缓存的整合与使用。
从sebService获得数据,分页显示,如果不用缓存刚每显示都很慢。配置文件自动清空缓存。
mybatis添加ehcache缓存支持,基于maven项目管理
EHCache缓存的说明文档是到处找来的内容,都有参考链接指向原地址。有三个测试项目也在里面:一个整合了Struts2或Hibernate,一个整合了MyBatis3,这两个是我做的;另一个ehcachetest是下载了別人的。
Ehcache 是一种广泛使用的开源 Java 分布式缓存。主要面向通用缓存,Java EE 和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个 gzip 缓存 servlet 过滤器,支持 REST 和 SOAP api...
EHcache缓存框架,ehcache介绍与说明,Ehcache详细,EHcache集群环境配置
Ehcache缓存技术 Ehcache缓存技术 Ehcache缓存技术 Ehcache缓存技术 Ehcache缓存技术
对数据缓存技术的一个总结,文档比较全面的阐述了缓存类型,功能特性和相关技术。
ehcache缓存页面 ehcache缓存页面
(见下图,为了减少get这几条网络传输,我们会在每个应用服务器上增加本地的ehcache缓存作为二级缓存,即第一次get到的数据存入ehcache,后面output输出即可从本地ehcache中获取,不用再访问redis了,所以就减少了...
Ehcache缓存配置说明帮助你如何使用Ehcache
ehcache页面缓存技术ehcache页面缓存技术ehcache页面缓存技术ehcache页面缓存技术ehcache页面缓存技术ehcache页面缓存技术ehcache页面缓存技术ehcache页面缓存技术ehcache页面缓存技术ehcache页面缓存技术ehcache...
Ehcache缓存配置
ehcache缓存的jar包和配置文件。
hibernate最核心的 就是缓存技术
springboot2.0使用ehcache缓存,这个压缩包时一个简单的demo。
ehcache缓存依赖的jar
ehcache缓存
本工程用于研究如何借助Ehcache缓存框架实现对页面的缓存 本工程编码方式:UTF-8 本工程开发工具:MyEclipse 说明: 1、ehcache.xml和ehcache.xsd两个文件可以在下在下载下来的名为“ehcache-core-x.x.x-...