Ehcache的简单使用

Ehcache是一个Java实现的开源分布式缓存框架,EhCache 可以有效地减轻数据库的负载,可以让数据保存在不同服务器的内存中,在需要数据的时候可以快速存取。同时EhCache 扩展非常简单,官方提供的Cache配置方式有好几种。你可以通过声明配置、在xml中配置、在程序里配置或者调用构造方法时传入不同的参数。

一、Ehcache使用案例

下面的例子是基于xml配置的。

package com.ghs.cache.ehcahe;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;

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

public class EhcacheService {

    private static final CacheManager CACHE_MANAGER = createManager();

    /**当前使用的Ehcache的名称*/
    private String currentCacheName;

    private static CacheManager createManager(){
        InputStream is = EhcacheService.class.getResourceAsStream("/ehcache.xml");
        CacheManager cacheManager = null;
        if(is!=null){
            try {
                cacheManager = CacheManager.create(is);
            } catch (Exception e) {
                cacheManager = CacheManager.create();
            }
        }else{
            cacheManager = CacheManager.create();
        }
        if(is!=null){
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return cacheManager;
    }

    public EhcacheService() {
        this.currentCacheName = this.getClass().getName();
        if (!CACHE_MANAGER.cacheExists(this.currentCacheName)) {
            CACHE_MANAGER.addCache(this.currentCacheName);
        }
    }

    public EhcacheService(String cacheName) {
        if(cacheName==null){
            throw new IllegalArgumentException("Cache name cannot be null!");
        }
        this.currentCacheName = cacheName;
        if (!CACHE_MANAGER.cacheExists(this.currentCacheName)) {
            CACHE_MANAGER.addCache(this.currentCacheName);
        }
    }

    private Ehcache getEhcache(){
        return CACHE_MANAGER.getCache(this.currentCacheName);
    }

    public void setCurrentEhcache(String cacheName){
        this.currentCacheName = cacheName;
        if(!CACHE_MANAGER.cacheExists(this.currentCacheName)){
            CACHE_MANAGER.addCache(this.currentCacheName);
        }
    }

    //====================下面是存取操作==============================
    public void put(String key,Object value){
        getEhcache().put(new Element(key, value));
    }

    public void put(String key,Object value,Date expiry){
        Element element = new Element(key,value);
        element.setTimeToLive(expiry.getDate());
        getEhcache().put(element);
    }

    public Object get(String key){
        return getEhcache().get(key);
    }

    public static void main(String[] args) {
        EhcacheService service = new EhcacheService();
        service.put("name", "zhangsan");
//      service.setCurrentEhcache("TEST");
        System.out.println(service.get("name"));
    }
}

ehcache.xml

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:noNamespaceSchemaLocation="ehcache.xsd">
  <diskStore path="java.io.tmpdir"/>
  <defaultCache
    maxElementsInMemory="10000"
    maxElementsOnDisk="0"
    eternal="true"
    overflowToDisk="true"
    diskPersistent="false"
    timeToIdleSeconds="0"
    timeToLiveSeconds="0"
    diskSpoolBufferSizeMB="50"
    diskExpiryThreadIntervalSeconds="120"
    memoryStoreEvictionPolicy="LFU"
    />
  <cache name="demoCache"
    maxElementsInMemory="100"
    maxElementsOnDisk="0"
    eternal="false"
    overflowToDisk="false"
    diskPersistent="false"
    timeToIdleSeconds="119"
    timeToLiveSeconds="119"
    diskSpoolBufferSizeMB="50"
    diskExpiryThreadIntervalSeconds="120"
    memoryStoreEvictionPolicy="FIFO"
    />
</ehcache>

运行结果:
[ key = name, value=zhangsan, version=1, hitCount=1, CreationTime = 1446649883626, LastAccessTime = 1446649883626 ]

二、ehcache.xml配置文件详解

  • name:缓存名称。
  • maxElementsInMemory:缓存最大个数。
  • eternal:对象是否永久有效,一但设置了,timeout将不起作用。
  • timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。 仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。
  • timeToLiveSeconds:设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大。
  • overflowToDisk:当内存中对象数量达到maxElementsInMemory时,Ehcache将会对象写到磁盘中。
  • diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。
  • maxElementsOnDisk:硬盘最大缓存个数。
  • diskPersistent:是否缓存虚拟机重启期数据 Whether the disk store persists between restarts of the Virtual Machine. The default value is false.
  • diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。
  • memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。
    clearOnFlush:内存数量最大时是否清除。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值