EHcache缓存框架详解

    添加时间:2013-6-13 点击量:

    EhCache是一个纯Java的过程内缓存框架,具有快速、精壮等特点,也是Hibernate中默认的CacheProvider。
    归纳一下它可能具有一下几个特点:
    1. 快速.
    2. 简单.
    3. 多种缓存策略
    4. 缓存数占领两级:内存和磁盘,是以无需愁闷容量题目
    5. 缓存数据会在虚拟机重启的过程中写入磁盘
    6. 可以经由过程RMI、可插入API等体式格式进行分布式缓存
    7. 具有缓存懈弛存经管器的侦听接口
    8. 支撑多缓存经管器实例,以及一个实例的多个缓存区域
    9. 供给Hibernate的缓存实现


    那么我们在开辟中到底如何应用EhCache框架呢?


    获取Ehcache相干jar包及帮助文档。


    地址:http://ehcache.org/code


    相干文档地址:http://ehcache.org/apidocs/



    /
    
    maxElementsInMemory:缓存中容许创建的最大对象数
    eternal:缓存中对象是否为永远的,若是是,超时设置将被忽视,对象从不过期。
    timeToIdleSeconds:缓存数据的钝化时候,也就是在一个元素灭亡之前,两次接见时候的最大时候间隔值, 这只能在元素不是永远驻留时有效,
    若是该值是 0 就意味着元素可以平息无穷长的时候。
    timeToLiveSeconds:缓存数据的生活生计时候,也就是一个元素从构建到灭亡的最大时候间隔值,这只能在元素不是永远驻留时有效,
    若是该值是0就意味着元素可以平息无穷长的时候。 overflowToDisk:内存不足时,是否启用磁盘缓存。
    memoryStoreEvictionPolicy:缓存满了之后的镌汰算法

    @param args
    /
    public static void main(String[] args) {
    // 创建一个缓存经管器对象
    CacheManager cacheManager = CacheManager.create();
    // 定名缓存经管器
    cacheManager.setName(testCacheManager);
    // 创建一个指定缓存名称的缓存对象
    Cache cache = new Cache(testCache, 4, false, false, 1, 1);
    // cache.setDisabled(true);
    // 将缓存对象添加至缓存经管器
    cacheManager.addCache(cache);

    // cacheManager.shutdown();

    System.out.println(断定缓存经管器中是否存在指定的缓存对象:
    + cacheManager.cacheExists(testCache));
    DiskStorePathManager disStoreManager = cacheManager
    .getDiskStorePathManager();
    System.out.println(获取当前设备文件硬盘路径:
    + disStoreManager.getFile(testCache.xml));

    Map<String, Object> map = new HashMap<String, Object>();
    map.put(name, tom);
    map.put(sex, 男);
    map.put(age, 1);
    // 重视:若是当前缓存对象设置了内存中最大缓存keyValue对象的话,若是超出时,则后面的覆盖前面的keyValue对象
    cache.put(new Element(cache1, map));
    cache.put(new Element(cache2, map));
    cache.put(new Element(cache3, map));

    Element element = new Element(cache4, map);
    element.setTimeToLive(1);

    cache.put(element);

    String[] cacheNames = cacheManager.getCacheNames();
    for (int i = 0; i < cacheNames.length; i++) {
    System.out.println(缓存 + i + : + cacheNames[i]);
    }

    // System.out.println(当前活动的缓存设备文件内容:\n
    // + cacheManager.getActiveConfigurationText());
    System.out.println(缓存经管器对象是否定名: + cacheManager.isNamed());

    Cache testCahe = cacheManager.getCache(testCache);

    System.out.println(缓存的状况: + testCahe.getStatus());
    System.out.println(缓存对象均匀获取时候: + testCahe.getAverageGetTime());
    System.out.println(获取缓存对象占用内存空间大小: + testCahe.getMemoryStoreSize());
    System.out.println(获取缓存对象大小: + testCahe.getSize());
    System.out.println(缓存是否封闭: + testCahe.isDisabled());
    System.out.println(断定某一个缓存key是否存在在缓存中
    + testCahe.isKeyInCache(cache3));
    System.out.println(断定某一个缓存值是否缓存在对象中: + testCahe.isValueInCache(map));

    // 验证缓存对象是否禁用
    if (!testCahe.isDisabled()) {
    System.out.println(断定缓存中某个对象是否过期:
    + testCahe.isExpired(testCahe.get(cache3)));
    } else {
    System.out.println(testCahe.getName() + 缓存已封闭);
    }
    System.out.println(断定某一个key是否缓存在内存中:
    + testCahe.isElementInMemory(cache1));
    System.out.println(断定某一个key是否缓存在磁盘中:
    + testCahe.isElementOnDisk(cache1));

    System.out.println(\n);

    List cacheKey = cache.getKeys();
    for (int i = 0; i < cacheKey.size(); i++) {
    Element cacheElement = testCahe.get(cacheKey.get(i));
    System.out.println(Key: + cacheKey.get(i) + ,value:
    + cacheElement.getObjectValue());
    }
    }


    所有随风而逝的都属于昨天的,所有历经风雨留下来的才是面向未来的。—— 玛格丽特·米切尔 《飘》
    分享到: