`

开源缓存包 EHCache 全接触

阅读更多

 EHCache 是一个纯java的,在Hibernate2.1充当可插入的的在进程中的缓存,它具有以下缓存,最小的依赖性,全面的文特性:快速,简单,丰富的文档和测试用例。

    官方网站 http://ehcache.sourceforge.net/

--------------------------
----------使用简介------------
--------------------------
    ehcache-1.2 cacheNames 列表的取得;

    方法一:
        CacheManager.create();
        String[] cacheNames = CacheManager.getInstance().getCacheNames();

    方法二:
        CacheManager manager = new CacheManager();
        String[] cacheNames = manager.getCacheNames();

    方法三:
        CacheManager manager1 = new CacheManager("src/config/ehcache1.xml");
        CacheManager manager2 = new CacheManager("src/config/ehcache2.xml");
        String[] cacheNamesForManager1 = manager1.getCacheNames();
        String[] cacheNamesForManager2 = manager2.getCacheNames();


    ehcache-1.2 管理器各种建立的方法:

    方法一:
         CacheManager manager = new CacheManager();

    方法二:
        CacheManager manager = new CacheManager("src/config/ehcache.xml");

    方法三:
        URL url = getClass().getResource("/anotherconfigurationname.xml");
        CacheManager manager = new CacheManager(url);

    方法四:
        InputStream fis = new FileInputStream(new File("src/config/ehcache.xml").getAbsolutePath());
        try {
            CacheManager manager = new CacheManager(fis);
        } finally {
            fis.close();
        }


    添加和删除缓存元素

        设置一个名为test 的新cache,test属性为默认
        CacheManager singletonManager = CacheManager.create();
        singletonManager.addCache("testCache");
        Cache test = singletonManager.getCache("testCache");

        设置一个名为test 的新cache,并定义其属性
        CacheManager singletonManager = CacheManager.create();
        Cache memoryOnlyCache = new Cache("testCache", 5000, false, false, 5, 2);
        manager.addCache(memoryOnlyCache);
        Cache test = singletonManager.getCache("testCache");
        
        Cache 属性说明:

            构造函数:
            public Cache(java.lang.String name,
                         int maxElementsInMemory,
                         boolean overflowToDisk,
                         boolean eternal,
                         long timeToLiveSeconds,
                         long timeToIdleSeconds)

            参数说明:
            name                          - 元素名字。
                maxElementsInMemory           - 设定内存中创建对象的最大值。
                overflowToDisk                - 设置当内存中缓存达到 maxInMemory 限制时元素是否可写到磁盘
                                                       上。
                eternal                       - 设置元素(译注:内存中对象)是否永久驻留。如果是,将忽略超
                                                      时限制且元素永不消亡。
                timeToIdleSeconds             - 设置某个元素消亡前的停顿时间。
                                                      也就是在一个元素消亡之前,两次访问时间的最大时间间隔值。
                                                      这只能在元素不是永久驻留时有效(译注:如果对象永恒不灭,则
                                                      设置该属性也无用)。
                                                      如果该值是 0 就意味着元素可以停顿无穷长的时间。
                timeToLiveSeconds             - 为元素设置消亡前的生存时间。
                                                       也就是一个元素从构建到消亡的最大时间间隔值。
                                                       这只能在元素不是永久驻留时有效。

        删除缓存元素:
        CacheManager singletonManager = CacheManager.create();
        singletonManager.removeCache("test");


    关闭缓存管理器 CacheManager
        
        CacheManager.getInstance().shutdown();


    对于缓存对象的操作:
        放入一个简单的对象到缓存元素;
        Cache cache = manager.getCache("sampleCache1");
        Element element = new Element("key1", "value1");
        cache.put(element);

        得到一个序列化后的对象属性值;
        Cache cache = manager.getCache("sampleCache1");
        Element element = cache.get("key1");
        Serializable value = element.getValue();

        得到一个没有序列化后的对象属性值;
        Cache cache = manager.getCache("sampleCache1");
        Element element = cache.get("key1");
        Object value = element.getObjectValue();
        
        删除一个对象从元素;
        Cache cache = manager.getCache("sampleCache1");
        Element element = new Element("key1", "value1"
        cache.remove("key1");

    对于永固性磁盘存储,立即存储到磁盘:

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


    获得缓存大小:
        得到缓存的对象数量;
        Cache cache = manager.getCache("sampleCache1");
        int elementsInMemory = cache.getSize();

        得到缓存对象占用内存的数量
        Cache cache = manager.getCache("sampleCache1");
        long elementsInMemory = cache.getMemoryStoreSize();

        得到缓存对对象占用磁盘的数量
        Cache cache = manager.getCache("sampleCache1");
        long elementsInMemory = cache.getDiskStoreSize();

    关于缓存的读取和丢失的记录
        得到缓存读取的命中次数;
        Cache cache = manager.getCache("sampleCache1");
        int hits = cache.getHitCount();
        
        得到内存中缓存读取的命中次数;
        Cache cache = manager.getCache("sampleCache1");
        int hits = cache.getMemoryStoreHitCount();

        得到磁盘中缓存读取的命中次数;
        Cache cache = manager.getCache("sampleCache1");
        int hits = cache.getDiskStoreCount();
        
        得到缓存读取的丢失次数;
        Cache cache = manager.getCache("sampleCache1");
        int hits = cache.getMissCountNotFound();

        得到缓存读取的已经被销毁的对象丢失次数;
        Cache cache = manager.getCache("sampleCache1");
        int hits = cache.getMissCountExpired();

--------------------------
----------简单例子------------
--------------------------

    实战:
        XML文件格式:

            <ehcache>

                <diskStore path="java.io.tmpdir"/>

                <defaultCache
                        maxElementsInMemory="10000"
                        eternal="false"
                        timeToIdleSeconds="120"
                        timeToLiveSeconds="120"
                        overflowToDisk="true"
                        diskPersistent="false"
                        diskExpiryThreadIntervalSeconds="120"
                        memoryStoreEvictionPolicy="LRU"
                        />

                <cache name="cache1"
                       maxElementsInMemory="10000"
                       eternal="false"
                       overflowToDisk="true"
                       timeToIdleSeconds="2"
                       timeToLiveSeconds="3"
                       memoryStoreEvictionPolicy="LFU"
                        />
                        
            </ehcache>

    源码:

        import java.io.Serializable;

        import net.sf.ehcache.Cache;
        import net.sf.ehcache.CacheManager;
        import net.sf.ehcache.Element;

        /**
         #############################################################################
         # DESCRIBE ehcache 缓存操作DEMO
         # AUTHOR   悠~游
         # DATE     2006-7-10
         # COMPANY  FLX
         # PORJECT  ehcache-demo
         #############################################################################
         */

        public class Demo {
            
            static CacheManager manager= new CacheManager();

            /**
             *##############################################################################
             *
             * @DESCRIBE    
             * @param args
             * @throws InterruptedException
             *                        
             *##############################################################################
             */
            public static void main(String[] args) throws InterruptedException {
                
                String[] cacheNames = manager.getCacheNames();
                System.out.println("读取的缓存列表为:");
                for(int i=0;i<cacheNames.length;i++){
                    System.out.println("-- "+(i+1)+" "+cacheNames[i]);
                }
                
                Cache cache = manager.getCache("cache1");
                Element element = new Element("key1", "value1");
                cache.put(element);
                
                element = cache.get("key1");
                Serializable value = element.getValue();
                System.out.println("序列化后的值为:"+value.toString());

                element = cache.get("key1");
                Object value1 = element.getObjectValue();
                System.out.println("未序列化的值为:"+value1.toString());
                
                int elementsInMemory = cache.getSize();
                System.out.println("得到缓存的对象数量:"+elementsInMemory);
                
                long elementsInMemory1 = cache.getMemoryStoreSize();
                System.out.println("得到缓存对象占用内存的数量:"+elementsInMemory1);
                
                long elementsInMemory2 = cache.getDiskStoreSize();
                System.out.println("得到缓存对对象占用磁盘的数量:"+elementsInMemory2);        
                
                int hits = cache.getHitCount();
                System.out.println("得到缓存读取的命中次数:"+hits);        
                
                int hits1 = cache.getMemoryStoreHitCount();
                System.out.println("得到内存中缓存读取的命中次数:"+hits1);        
                
                int hits2 =cache.getDiskStoreHitCount();
                System.out.println("得到磁盘中缓存读取的命中次数:"+hits2);        
                
                int hits3 = cache.getMissCountNotFound();
                System.out.println("得到缓存读取的丢失次数:"+hits3);        
                
                int hits4 = cache.getMissCountExpired();
                System.out.println("得到缓存读取的已经被销毁的对象丢失次数:"+hits4);    
            }

        }

 

分享到:
评论

相关推荐

    基于java的开发源码-ehcache(Java缓存框架 EhCache).zip

    基于java的开发源码-ehcache(Java缓存框架 EhCache).zip 基于java的开发源码-ehcache(Java缓存框架 EhCache).zip 基于java的开发源码-ehcache(Java缓存框架 EhCache).zip 基于java的开发源码-ehcache(Java缓存框架 ...

    Java缓存框架 EhCache

    EhCache是一个广泛使用的开源Java缓存框架,它以其高效、轻量级和易于集成的特性,在Java开发领域中占据了重要的地位。作为进程内缓存解决方案,EhCache能够在应用程序运行时存储数据,显著提高数据访问速度,减轻...

    spring + ehcache + redis两级缓存

    当我们谈论“Spring + Ehcache + Redis”两级缓存时,我们实际上是在讨论如何在Java环境中利用Spring框架来集成Ehcache作为本地缓存,并利用Redis作为分布式二级缓存,构建一个高效且可扩展的缓存解决方案。...

    ehcache页面缓存技术

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

    ehcache(Java缓存框架 EhCache)

    ehcache(Java缓存框架 EhCache)

    java 缓存插件ehcache 应用实例

    Ehcache是一款广泛使用的开源Java缓存框架,尤其在处理大量数据时,它可以显著提升应用程序的效率。本文将深入探讨Ehcache在实际应用中的实例。 一、Ehcache简介 Ehcache是由Terracotta公司开发的高性能、易用的...

    Java缓存框架 Ehcache.zip

    EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。 下图是 Ehcache 在应用程序中的位置: 主要的特性有: 1. 快速.2. 简单.3. 多种缓存策略4. 缓存数据有两级:...

    java源码:ehcache(Java缓存框架 EhCache).rar

    EhCache是一个开源的Java缓存框架,广泛用于提高应用程序的性能和响应速度。它允许在内存中存储数据,减少对数据库的访问,从而优化系统性能。以下是对EhCache框架的一些关键知识点的详细说明: 1. **缓存概念**: ...

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

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

    JAVA源码ehcache(Java缓存框架EhCache)

    JAVA源码ehcache(Java缓存框架EhCache)

    ehcache(Java缓存框架 EhCache).7z

    EhCache是一个开源的、基于Java的分布式缓存框架,被广泛用于提高应用程序的性能和响应速度。在Java世界中,缓存是优化系统性能的关键技术之一,它通过存储经常访问的数据来减少对数据库的访问,从而降低系统负载。...

    基于java的ehcache(Java缓存框架 EhCache).zip

    EhCache是一个高性能、易用且广泛应用于Java环境中的分布式缓存框架。它主要用于提高应用程序的性能和响应速度,通过存储经常...这个资料包将带你深入理解EhCache的原理和应用,帮助你在实际项目中充分利用缓存技术。

    java资源ehcache(Java缓存框架EhCache)

    java资源ehcache(Java缓存框架 EhCache)提取方式是百度网盘分享地址

    缓存框架-Ehcache学习笔记

    Ehcache 是一个广泛使用的开源 Java 缓存框架,它在处理大量数据的高性能应用中扮演着重要角色。Ehcache 提供了本地内存缓存、磁盘存储以及分布式缓存的能力,使得应用程序能够快速访问频繁使用的数据,从而提高整体...

    Hibernate二级缓存(Ehcache)

    Ehcache是一种广泛使用的开源缓存解决方案,它支持内存和磁盘存储,并提供了丰富的API和配置选项。在Hibernate中集成Ehcache作为二级缓存,能够进一步提升数据读取速度,尤其是在高并发场景下。 首先,我们需要在...

    16一级缓存、二级缓存、EhCache第三方缓存.md

    16一级缓存、二级缓存、EhCache第三方缓存.md

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

    Ehcache是一个高性能的、基于Java的进程内缓存解决方案,它被广泛应用于各种Java应用程序,包括Java EE和轻量级容器。Ehcache的主要优势在于它的快速响应、易用性和丰富的缓存策略。它提供了两种级别的缓存存储:...

    ehcache资料(包含ehcache jar包)

    **Ehcache** 是一个广泛使用的Java缓存库,它为应用程序提供了本地内存缓存功能,以提高数据访问速度和减少数据库负载。Ehcache在处理高并发和大数据量的场景下表现出色,尤其适用于那些频繁读取但不经常修改的数据...

    基于Java的ehcache(Java缓存框架 EhCache).zip

    EhCache作为开源的内存缓存解决方案,提供了本地缓存、分布式缓存以及对数据库查询结果的缓存等功能。 EhCache的核心概念主要包括缓存、缓存管理器、缓存区域和缓存项。 1. **缓存**:缓存是存储数据的地方,它以...

Global site tag (gtag.js) - Google Analytics