zoukankan      html  css  js  c++  java
  • ehcache 简介和基本api使用

    文章转载自: https://blog.csdn.net/zhouzhiwengang/article/details/59838105

    1.ehcahce简介 
    在开发高并发量,高性能的网站应用系统时,缓存Cache起到了非常重要的作用。 
    EHCache是来自sourceforge(http://ehcache.sourceforge.net/)的开源项目,也是纯Java实现的简单、快速的Cache组件。EHCache支持内存和磁盘的缓存,支持LRU、LFU和FIFO多种淘汰算法,支持分布式的Cache,可以作为Hibernate的缓存插件,是Hibernate中默认的CacheProvider。同时它也能提供基于Filter的Cache,该Filter可以缓存响应的内容并采用Gzip压缩提高响应速度。 

    Ehcache缓存的特点: 
    1. 快速. 
    2. 简单. 
    3. 多种缓存策略 
    4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题 
    5. 缓存数据会在虚拟机重启的过程中写入磁盘 
    6. 可以通过RMI、可插入API等方式进行分布式缓存 
    7. 具有缓存和缓存管理器的侦听接口 
    8. 支持多缓存管理器实例,以及一个实例的多个缓存区域 
    9. 提供Hibernate的缓存实现 

    2.Ehcache缓存- 解读Ehcache配置文件ehcache.xml 
    缓存的配置有很多选项,主要集中在ehcache.xml里。比如缓存的名称,监听器等。Ehcache提供了默认的配置文件。同时可以自己指定缓存,比如 

    <diskStore path="D:/work2/renhewww/cache"/>   
    <cache name=" sampleCache1"   
          maxElementsInMemory="1"   
               maxElementsOnDisk="10000"   
               eternal="false"   
               overflowToDisk="true"   
               diskSpoolBufferSizeMB="20"   
               diskPersistent="true"   
               timeToIdleSeconds="43200"   
               timeToLiveSeconds="86400"   
               memoryStoreEvictionPolicy="LFU"   
            />   

    各配置参数的含义: 
    name:Cache的唯一标识 
    maxElementsInMemory:缓存中允许创建的最大对象数 
    eternal:缓存中对象是否为永久的,如果是,超时设置将被忽略,对象从不过期。 
    timeToIdleSeconds:缓存数据的钝化时间,也就是在一个元素消亡之前,两次访问时间的最大时间间隔值,这只能在元素不是永久驻留时有效,如果该值是 0 就意味着元素可以停顿无穷长的时间。 
    timeToLiveSeconds:缓存数据的生存时间,也就是一个元素从构建到消亡的最大时间间隔值,这只能在元素不是永久驻留时有效,如果该值是0就意味着元素可以停顿无穷长的时间。 
    overflowToDisk:内存不足时,是否启用磁盘缓存。 
    memoryStoreEvictionPolicy:缓存满了之后的淘汰算法。LRU和FIFO算法这里就不做介绍。LFU算法直接淘汰使用比较少的对象,在内存保留的都是一些经常访问的对象。对于大部分网站项目,该算法比较适用。 
    如果应用需要配置多个不同命名并采用不同参数的Cache,可以相应修改配置文件,增加需要的Cache配置即可。

    3.Ehcache缓存的使用 
    3.1 安装ehcache 
    Ehcache 的特点,是一个纯Java ,过程中(也可以理解成插入式)缓存实现,单独安装Ehcache ,需把ehcache-X.X.jar 和相关类库方到classpath中。如项目已安装了Hibernate ,则不需要做什么,直接可以使用Ehcache 。 

    如果使用maven,可以在pom.xml里配置: 
      

    <dependency>  
              <groupId>net.sf.ehcache</groupId>  
              <artifactId>ehcache</artifactId>  
              <version>2.9.0</version>  
    </dependency>  

    3.2 生成CacheManager 
    使用CacheManager 创建并管理Cache大概步骤为: 
    第一步:生成CacheManager对象 
    第二步:生成Cache对象 
    第三步:向Cache对象里添加由key,value组成的键值对的Element元素 
    第四步:关闭CacheManager。 

    1.创建CacheManager有4种方式: 
    方式一:使用默认配置文件创建 
    Ehcache有默认的配置文件ehcache.xml,里面有默认的配置和一个默认的缓存。

    CacheManager manager = CacheManager.create();    

    方式二:使用指定配置文件创建 

    CacheManager manager =CacheManager.create("src/config/ehcache.xml"); 

    方式三:从classpath中找寻配置文件并创建 

    URL url = getClass().getResource("/anothername.xml");    
    CacheManager manager = CacheManager.create(url);   

    方式四:通过输入流创建 

    InputStream fis = new FileInputStream(new File("src/config/ehcache.xml").getAbsolutePath());    
      
    try  
    {    
        manager = CacheManager.create(fis);    
    }   
    finally  
    {    
        if (fis != null)  
        {  
            fis.close();  
        }  
    }  

    // 使用manager移除指定名称的Cache对象 

    manager.removeCache("demoCache");  

    可以通过调用manager.removalAll()来移除所有的Cache。 

    2 创建Cache 
    通过CacheManager创建Cache: 

    Cache cache = manager.getCache("sampleCache1");  

    3 利用cache存取数据 
    存储数据 

    Element element = new Element("key1", "value1");     
    cache.put(new Element(element);    

    获取数据 

    Element element = cache.get("key1"); 

    //从Cache中移除一个元素 

    cache.remove("key");   

    注意:可以直接使用上面的API进行数据对象的缓存,这里需要注意的是对于缓存的对象都是必须可序列化的。 

    4.缓存的关闭 

    manager.shutdown();    

    3.3 实例 

    import net.sf.ehcache.Cache;  
    import net.sf.ehcache.CacheManager;  
    import net.sf.ehcache.Element;  
      
    public class Ehcache  
    {  
        public static void main(String[] args)  
        {  
            CacheManager manager = CacheManager.create("src/main/resources/conf/ehcache.xml");  
            Cache cache = manager.getCache("sampleCache1");  
            Element element new Element("key","value");  
            cache.put(element);  
              
            System.out.println(cache.get("key"));  
              
            manager.shutdown();  
    } 

    输出: 
    [ key = key, value=value, version=1, hitCount=1, CreationTime = 1414933551601, LastAccessTime = 1414933551601 ] 

    更多资料: https://blog.csdn.net/vbirdbest/article/details/72763048

  • 相关阅读:
    阿里开源的那个牛X的问题排查工具——Arthas,推出IDEA插件了!
    Serverless 风起云涌,为什么阿里,微软,AWS 却开始折腾 OAM?
    读书笔记 effective c++ Item 6 如果你不想使用编译器自动生成的函数,你需要明确拒绝
    读书笔记 effective c++ Item 5 了解c++默认生成并调用的函数
    读书笔记 effective c++ Item 4 确保对象被使用前进行初始化
    读书笔记 effective c++ Item 3 在任何可能的时候使用 const
    读书笔记 effective c++ Item 2 尽量使用const,枚举(enums),内联(inlines),不要使用宏定义(define)
    读书笔记 effective c++ Item 1 将c++视为一个语言联邦
    房产知识 集锦
    读书笔记 --TCP :传输控制协议(二)
  • 原文地址:https://www.cnblogs.com/huaixiaonian/p/9704913.html
Copyright © 2011-2022 走看看