Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 430|回复: 0

[jsp学习]ehcache缓存的使用

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-2 00:35:19 | 显示全部楼层 |阅读模式
    一.介绍与应用场景 ehcache是一开源缓存工具,其许可证为Apache License, Version 2.0,非常友好的许可。在 sourceforge.net 上可找到它的最新版本。 缓存应用在多个领域并发挥作用,ehcache可应用于数据库访问缓存,安全认证缓存,web缓存,soap 和 RESTFul 服务缓存,应用程序持久对象缓存以及分布式缓存。 二.架设开发环境 无它,只需把ehcache的相关jar包放到classpath下,把配置文件ehcache.xml放在classpath下就可以进行应用开发了。下面是配置文件中默认配置的xml节点的内容
      
       
       
         
       

         
       
      
    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"
                />[/code]  原文件中有比较详尽的注释,在这里我简单翻译几个 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代码
       
       
      
      
      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();
    }
    }[/code] 2. 使用 Caches

      
      
       Java代码
       
       
      
      
      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();
    }
    }[/code] 看了以上的内容,相信对ehcache就可以进行一般的应用了

      
      
       
       

         
       

         
       
      
    复制代码

    源码下载:http://file.javaxxz.com/2014/10/2/003519219.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-27 05:23 , Processed in 0.464708 second(s), 50 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表