`
showmystage
  • 浏览: 56017 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

ehcache缓存的使用

阅读更多

一.介绍与应用场景

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

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

 

二.架设开发环境

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

 

Xml代码

  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.         />  
<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

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

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. * 使用 Caches
  15. * @author zhangyt
  16. *
  17. */  
  18. public class UsingCaches {   
  19.     public static void main(String[] args) {   
  20.          CacheManager.create();   
  21.          CacheManager manager= CacheManager.getInstance();   
             manager.addCache("sampleCache1");
  22.         //1.取得Cache   
  23.          Cache cache = manager.getCache("sampleCache1");   
  24.            
  25.         //2.执行 CRUD 操作   
  26.         //2.1   增加元素   
  27.          Element element1 = new Element("key1", "value1");   
  28.          Element element2 = new Element("key2", "value2");   
  29.          cache.put(element1);   
  30.          cache.put(element2);   
  31.         //2.2 更新元素   
  32.          cache.put(new Element("key1", "value1u"));   
  33.         //2.3 取值   
  34.         //取得一个序列化了的值   
  35.          Element element231 = cache.get("key1");   
  36.          Serializable value231 = element231.getValue();   
  37.          System.out.println(value231);   
  38.         //取得一个不是序列化的值   
  39.          Element element232 = cache.get("key1");   
  40.          Object value232 = element232.getObjectValue();   
  41.          System.out.println(value232);   
  42.         //3.4 删除一个元素   
  43.          cache.remove("key2");   
  44.          System.out.println(cache.get("key2") == null);   
  45.            
  46.         //3. 强硬命令写入硬盘   
  47.          cache.flush();   
  48.            
  49.         //4. 取得缓存的大小   
  50.         //得到总的缓存数目   
  51.         int elements = cache.getSize();   
  52.          System.out.println(elements);   
  53.         //得到在内存中的元素数量   
  54.         long elementsInMemory = cache.getMemoryStoreSize();   
  55.          System.out.println(elementsInMemory);   
  56.         //得到硬盘中的缓存元素数量   
  57.         long elementsInDisk = cache.getDiskStoreSize();   
  58.          System.out.println(elementsInDisk);   
  59.            
  60.         /**
  61.           * 在官方文档中有cache.getHitCount();等相关方法,在这里已经找不到
  62.           * 应该是版本变迁的原因。
  63.           */  
  64.            
  65.         //5.高级主题 注册mbean 也许在以后的高级主题中会进一步阐述   
  66.          CacheManager manager1 = new CacheManager();   
  67.          MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();   
  68.          ManagementService.registerMBeans(manager1, mBeanServer, false, false, false, true);   
  69.   
  70.          manager.shutdown();   
  71.      }   
  72. }  
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缓存使用

    本文将详细讲解"cache/ehcache缓存使用"的相关知识点,包括缓存的基本概念、Ehcache的介绍、以及如何在Java应用中使用Ehcache进行缓存操作。 首先,我们要理解什么是缓存。缓存是一种存储技术,它临时存储常用或...

    Spring Boot的EhCache缓存使用.docx

    在Spring Boot的主配置类上添加`@EnableCaching`注解,并通过`spring.cache.type=ehcache`属性指定使用EhCache作为缓存提供者。 4. **更新配置**: 如果有自定义的`CacheManager`配置,需要在配置类中添加`@...

    EHcache 缓存使用 手动存储 配置到SSH

    **正文** 在IT行业中,缓存技术是一种非常重要的性能...手动存储数据到缓存以及配置自动清空策略是优化缓存使用的关键。记住,缓存并非总是答案,合理的缓存策略应结合业务需求和系统负载进行设计,以达到最佳效果。

    Ehcache缓存

    **Ehcache缓存** Ehcache是一种广泛使用的开源Java分布式缓存系统,它为高性能应用程序提供了内存存储和缓存解决方案。在Java世界中,尤其是在持久化框架如Hibernate的使用中,Ehcache扮演了至关重要的角色。由于...

    mybatis添加ehcache缓存支持

    为了提高性能和减少对数据库的直接访问,MyBatis 提供了缓存功能,而Ehcache 是一个广泛使用的开源Java缓存库,可以集成到MyBatis 中以实现高效的缓存管理。 在MyBatis 中添加Ehcache 缓存支持,首先需要确保项目...

    Ehcache分布式缓存与其在SpringBoot应用

    在分布式环境中,Ehcache通过使用JGROUP来实现分布式缓存。JGROUP是一个用于构建可靠集群通信的库,可以提供组成员资格、故障检测、传输协议等多种功能,使得Ehcache能够在多个节点之间共享和同步缓存数据。Ehcache...

    ehcache缓存配置详解

    ehcache 缓存配置详解 Ehcache 是一个流行的 Java 缓存框架,提供了强大的缓存机制,帮助开发者提高应用程序的性能和可扩展性。 Ehcache 的配置主要包括 diskstore、defaultCache、cache 三个部分,这三个部分的...

    EHCache缓存的说明和测试

    EHCache缓存的说明文档是到处找来的内容,都有参考链接指向原地址。有三个测试项目也在里面:一个整合了Struts2或Hibernate,一个整合了MyBatis3,这两个是我做的;另一个ehcachetest是下载了別人的。

    ehcache 缓存

    3. **缓存操作**: 添加元素到缓存使用`put()`方法,获取元素使用`get()`方法,移除元素使用`remove()`方法,清空整个缓存使用`clear()`方法。 **三、Ehcache缓存策略** 1. **缓存淘汰策略**: 当缓存达到预设的最大...

    EHcache缓存框架

    **EHcache缓存框架** EHcache是一款开源的Java缓存框架,它被广泛应用于提高应用程序的性能和响应速度,通过存储频繁访问的数据到内存中,避免了每次请求时都进行昂贵的数据库查询。EHcache的设计目标是轻量级、高...

    Spring 与Ehcache实现基于方法的缓存

    Ehcache则是一款广泛使用的开源缓存解决方案,用于提高应用程序性能,减少数据库负载。本篇文章将详细探讨如何在Spring框架中集成并实现基于方法的缓存机制,利用Ehcache来优化数据访问。 首先,我们需要理解Spring...

    javaWeb中Ehcache缓存配置说明

    本文将深入解析Ehcache缓存配置的关键知识点,帮助你更好地掌握如何在JavaWeb项目中使用Ehcache。 #### Ehcache基本概念与工作原理 Ehcache支持多种缓存策略,包括但不限于L1(一级缓存)、L2(二级缓存)等。在...

    ehcache项目缓存技术

    5. **监控和优化**:Ehcache提供了一些监控工具,帮助开发者分析缓存的使用情况并进行优化。 五、实战案例 在大型电商网站中,用户主页的个性化推荐数据可以利用Ehcache进行缓存。当用户登录后,先从缓存中查找其...

    ehcache缓存的jar包和配置文件

    总的来说,Ehcache是一个强大的工具,能够帮助提升Java应用的性能,通过合理配置和使用,可以有效地管理缓存,避免频繁的数据库交互,从而提高系统响应速度。记住,优化缓存的关键在于理解业务需求和数据访问模式,...

    Spring Boot 2.x基础教程:使用EhCache缓存集群.docx

    为了解决这个问题,我们需要配置EhCache缓存集群,以确保数据更新能在各个进程中同步。以下是如何使用EhCache实现缓存集群的详细步骤: 首先,确保缓存对象是可序列化的。在上述例子中,`User`实体需要实现`...

    ehcache页面缓存技术

    ehcache页面缓存技术ehcache页面缓存技术ehcache页面缓存技术ehcache页面缓存技术ehcache页面缓存技术ehcache页面缓存技术ehcache页面缓存技术ehcache页面缓存技术ehcache页面缓存技术ehcache页面缓存技术ehcache...

    Spring Boot 2.x的EhCache缓存的使用问题详解.docx

    在本文中,我们将深入探讨如何在Spring Boot环境中配置和使用EhCache进行缓存。 首先,Spring Boot自动配置缓存管理器时会按照特定的顺序检测可用的缓存提供商。默认情况下,它会尝试找到以下缓存实现:Generic、...

    springboot整合Ehcache组件,轻量级缓存管理

    Ehcache缓存简介 1、基础简介 EhCache是一个纯Java的进程内缓存框架,具有快速、上手简单等特点,是Hibernate中默认的缓存提供方。 2、Hibernate缓存 Hibernate三级缓存机制简介: 一级缓存:基于Session级别分配...

    ehcache缓存依赖的jar

    "ehcache缓存依赖的jar"这个标题暗示我们将讨论Ehcache的核心库及其依赖关系。 Ehcache的核心JAR文件是`ehcache.jar`,它包含了Ehcache的所有核心组件和接口。这个文件提供了缓存管理、缓存配置、缓存策略(如LRU、...

Global site tag (gtag.js) - Google Analytics