ehcache是一开源缓存工具

ehcache是一开源缓存工具,其许可证为Apache License, Version 2.0,非常友好的许可。在sourceforge.net 上可找到它的最新版本。

缓存应用在多个领域并发挥作用,ehcache可应用于数据库访问缓存,安全认证缓存,web缓存,soap 和 RESTFul 服务缓存,应用程序持久对象缓存以及分布式缓存。

 

二.架设开发环境

无它,只需把ehcache的相关jar包放到classpath下,把配置文件ehcache.xml放在classpath下就可以进行应用开发了。下面是配置文件中默认配置的xml节点的内容
 

XML/HTML代码
  1. <defaultCache      
  2.         maxElementsInMemory="10000"      
  3.         eternal="false"      
  4.         timeToIdleSeconds="120"      
  5.         timeToLiveSeconds="120"      
  6.         overflowToDisk="true"      
  7.         diskSpoolBufferSizeMB="30"      
  8.         maxElementsOnDisk="10000000"      
  9.         diskPersistent="false"      
  10.         diskExpiryThreadIntervalSeconds="120"      
  11.         memoryStoreEvictionPolicy="LRU"      
  12.         />  

原文件中有比较详尽的注释,在这里我简单翻译几个

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)最少使用。

三.实例编写

继续以往的作风,用代码说话。代码中有良好的注释。(代码参考字官方文档)

Java代码
  1. package tutorial;       
  2.       
  3. import java.io.File;       
  4. import java.io.FileInputStream;       
  5. import java.io.InputStream;       
  6. import java.net.URL;       
  7.       
  8. import net.sf.ehcache.Cache;       
  9. import net.sf.ehcache.CacheManager;       
  10.       
  11.       
  12. public class UsingTheCacheManager {       
  13.     public static void main(String[] args) throws Exception {       
  14.         //1.       
  15.         //创建CacheManager单例对象,使用默认配置       
  16.         CacheManager.create();       
  17.         String[] cacheNames1 = CacheManager.getInstance().getCacheNames();       
  18.         //关闭       
  19.         CacheManager.getInstance().shutdown();       
  20.                
  21.         //2.       
  22.         //用默认配置创建对象可用此创建多例       
  23.         CacheManager manager2 = new CacheManager();       
  24.         String[] cacheNames2 = manager2.getCacheNames();       
  25.         manager2.shutdown();       
  26.                
  27.         //3.加载配置的方式       
  28.         //3.1 用默认配置加载在上面已经提到。即需要在classpath下放置ehcache.xml配置文件       
  29.         //3.2 用指定配置文件路径的方式创建       
  30.         CacheManager manager31 = new CacheManager("src/config/ehcache.xml");       
  31.         manager31.shutdown();       
  32.         //3.2 用classpath下的配置文件生成       
  33.         URL url = UsingTheCacheManager.class.getClassLoader().getResource("config/ehcache.xml");       
  34.         CacheManager manager32 = new CacheManager(url);       
  35.         manager32.shutdown();       
  36.         //3.3 通过输入流生成       
  37.         InputStream fis = new FileInputStream(new File("src/config/ehcache.xml").getAbsolutePath());       
  38.         try {       
  39.             CacheManager manager33 = new CacheManager(fis);       
  40.             manager33.shutdown();       
  41.         } finally {       
  42.             fis.close();       
  43.         }       
  44.                
  45.         //4. 以编程的方式添加和删除cache       
  46.         CacheManager singletonManager4 = CacheManager.create();       
  47.         //4.1 用默认配置添加       
  48.         singletonManager4.addCache("test41");       
  49.         Cache test41 = singletonManager4.getCache("test41");       
  50.         System.out.println(test41 != null);       
  51.         //4.2 创建一个cache并添加到CacheManager       
  52.         Cache memoryOnlyCache = new Cache("test42"5000falsefalse52);       
  53.         singletonManager4.addCache(memoryOnlyCache);       
  54.         Cache test42 = singletonManager4.getCache("test42");       
  55.         //4.3 删除cache       
  56.         singletonManager4.removeCache("sampleCache1");       
  57.         singletonManager4.shutdown();       
  58.     }       
  59. }     

2. 使用 Caches

Java代码
  1. package tutorial;       
  2.       
  3. import java.io.Serializable;       
  4. import java.lang.management.ManagementFactory;       
  5.       
  6. import javax.management.MBeanServer;       
  7.       
  8. import net.sf.ehcache.Cache;       
  9. import net.sf.ehcache.CacheManager;       
  10. import net.sf.ehcache.Element;       
  11. import net.sf.ehcache.management.ManagementService;       
  12.       
  13.       
  14. public class UsingCaches {       
  15.     public static void main(String[] args) {       
  16.         CacheManager.create();       
  17.         CacheManager manager= CacheManager.getInstance();       
  18.         //1.取得Cache       
  19.         Cache cache = manager.getCache("sampleCache1");       
  20.                
  21.         //2.执行 CRUD 操作       
  22.         //2.1  增加元素       
  23.         Element element1 = new Element("key1""value1");       
  24.         Element element2 = new Element("key2""value2");       
  25.         cache.put(element1);       
  26.         cache.put(element2);       
  27.         //2.2 更新元素       
  28.         cache.put(new Element("key1""value1u"));       
  29.         //2.3 取值       
  30.         //取得一个序列化了的值       
  31.         Element element231 = cache.get("key1");       
  32.         Serializable value231 = element231.getValue();       
  33.         System.out.println(value231);       
  34.         //取得一个不是序列化的值       
  35.         Element element232 = cache.get("key1");       
  36.         Object value232 = element232.getObjectValue();       
  37.         System.out.println(value232);       
  38.         //3.4 删除一个元素       
  39.         cache.remove("key2");       
  40.         System.out.println(cache.get("key2") == null);       
  41.                
  42.         //3. 强硬命令写入硬盘       
  43.         cache.flush();       
  44.                
  45.         //4. 取得缓存的大小       
  46.         //得到总的缓存数目       
  47.         int elements = cache.getSize();       
  48.         System.out.println(elements);       
  49.         //得到在内存中的元素数量       
  50.         long elementsInMemory = cache.getMemoryStoreSize();       
  51.         System.out.println(elementsInMemory);       
  52.         //得到硬盘中的缓存元素数量       
  53.         long elementsInDisk = cache.getDiskStoreSize();       
  54.         System.out.println(elementsInDisk);       
  55.                
  56.               
  57.                
  58.         //5.高级主题 注册mbean 也许在以后的高级主题中会进一步阐述       
  59.         CacheManager manager1 = new CacheManager();       
  60.         MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();       
  61.         ManagementService.registerMBeans(manager1, mBeanServer, falsefalsefalsetrue);       
  62.       
  63.         manager.shutdown();       
  64.     }       
  65. }    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值