您的位置:首页 > 其它

Ehcache框架简单使用

2016-05-23 16:27 405 查看
内容逐渐添加中....

1. Ehcache框架使用需要的jar包有:ehcache-1.6.2jar,将其导入项目即可

2. 简单使用步骤:

2.1 首先在cache.xml中进行简单配置

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd">
<diskStore path="D:/Logs/" />
<defaultCache
maxElementsInMemory="500"
eternal="false"
timeToIdleSeconds="300"
timeToLiveSeconds="1200"
overflowToDisk="true" />
<cache name="testCache1" maxElementsInMemory="150" eternal="false" timeToLiveSeconds="36000" timeToIdleSeconds="3600" overflowToDisk="true"/>
</ehcache>


2.2 其次使用EhcacheUtil类进行简单的put和get操作

package com.csl.nnn.common;

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

public class EhcacheUtil {
private static final String path = "D:/Logs/cache.xml";
private CacheManager manager;

private static EhcacheUtil ehCache;

private EhcacheUtil(String path) {
manager = CacheManager.create(path);
}

public static EhcacheUtil getInstance() {
if (ehCache== null) {
System.out.println("is null");
ehCache= new EhcacheUtil(path);
}
return ehCache;
}

public void put(String cacheName, String key, Object value) {
Cache cache = manager.getCache(cacheName);
System.out.println("key and value:"+key+":"+value);
if (cache==null){
System.out.println("cache is null");
cache=new Cache(cacheName,10000000,true,false,0,0);
/**
* 2->允许内存中缓存对象大小
* 3->允许内存达到最大后写入磁盘 true
* 4->永久存储 true
* 5、6->element存活时间无穷大 0,0
*/
}
Element element = new Element(key,value);
System.out.println("element:"+element.toString());
cache.put(element);
}

public Object get(String cacheName, String key) {
Cache cache = manager.getCache(cacheName);
Element element = cache.get(key);
return element == null?null:element.getObjectValue();
}

public Cache get(String cacheName) {
return manager.getCache(cacheName);
}

public void remove(String cacheName, String key) {
Cache cache = manager.getCache(cacheName);
cache.remove(key);
}
}


2.3 简单的test demo

package com.csl.nnn.common;

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

public class TestECache {
public static void main(String[] argStrings){
//创建cache
/* String fileName="D:/Logs/cache.xml";
CacheManager manager = CacheManager.create(fileName);
Cache cache = new Cache("test", 1, true, false, 5, 2);
manager.addCache(cache);
Element element = new Element("key1", "value1");
cache.put(element);  */
EhcacheUtil.getInstance().put("testCache1", "mtest1", "mcontent1");
EhcacheUtil.getInstance().put("testCache1", "mtest2", "mcontent2");

String value=EhcacheUtil.getInstance().get("testCache1", "mtest2").toString();
System.out.println("value:"+value);

}
}


要注意的是,put方法的cacheName要和cache.xml中设置的cacheName一致,否则会报错Cahe is not alive.

另外cache.xml中一些参数:

diskStore :指定数据存储位置,可指定磁盘中的文件夹位置

defaultCache : 默认的管理策略

以下属性是必须的:

name: Cache的名称,必须是唯一的(ehcache会把这个cache放到HashMap里)。

maxElementsInMemory: 在内存中缓存的element的最大数目。 

maxElementsOnDisk: 在磁盘上缓存的element的最大数目,默认值为0,表示不限制。 

eternal: 设定缓存的elements是否永远不过期。如果为true,则缓存的数据始终有效,如果为false那么还要根据timeToIdleSeconds,timeToLiveSeconds判断。 

overflowToDisk: 如果内存中数据超过内存限制,是否要缓存到磁盘上。

以下属性是可选的: 

timeToIdleSeconds: 对象空闲时间,指对象在多长时间没有被访问就会失效。只对eternal为false的有效。默认值0,表示一直可以访问。

timeToLiveSeconds: 对象存活时间,指对象从创建到失效所需要的时间。只对eternal为false的有效。默认值0,表示一直可以访问。

diskPersistent: 是否在磁盘上持久化。指重启jvm后,数据是否有效。默认为false。 

diskExpiryThreadIntervalSeconds: 对象检测线程运行时间间隔。标识对象状态的线程多长时间运行一次。 

diskSpoolBufferSizeMB: DiskStore使用的磁盘大小,默认值30MB。每个cache使用各自的DiskStore。 

memoryStoreEvictionPolicy: 如果内存中数据超过内存限制,向磁盘缓存时的策略。默认值LRU,可选FIFO、LFU。

缓存的3 种清空策略 :

FIFO ,first in first out (先进先出).

LFU , Less Frequently Used (最少使用).意思是一直以来最少被使用的。缓存的元素有一个hit 属性,hit 值最小的将会被清出缓存。

LRU ,Least Recently Used(最近最少使用). (ehcache 默认值).缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: