Ehcache缓存工具类

1.加入Ehcache的maven引用

<!-- 缓存 -->
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>2.10.0</version>
</dependency>

<dependency>
<groupId>net.sf.ezmorph</groupId>
<artifactId>ezmorph</artifactId>
<version>1.0.6</version>
</dependency>

2.配置ehcache-base.xml文件

<?xml version="1.0" encoding="UTF-8"?>

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd"
updateCheck="false" monitoring="autodetect">

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

<cacheManagerPeerListenerFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"/>

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

<cache name="SystemCache"
maxElementsInMemory="100000"
maxElementsOnDisk="1000"
eternal="false"
overflowToDisk="false"
diskSpoolBufferSizeMB="20"
timeToIdleSeconds="3600"
timeToLiveSeconds="3600"
memoryStoreEvictionPolicy="LFU">
</cache>
</ehcache>

3.创建工具类

package org.chris.framework.utils.cache;

import java.net.URL;

import org.chris.framework.utils.Assert;

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

/**
* [单例的Ehcache缓存工具类]
*
* @author Chris li
* @version [版本, 2017-04-12]
* @see
*/
public class EhcacheUtil {

private static final String PATH = "/ehcache-base.xml";

private static final String DEFAULT_CACHE_NAME = "SystemCache";

private static URL url;

private volatile static CacheManager manager;

/**
* [获取缓存管理类实例,双重锁确保缓存管理类单例]
*
* @author Chris li
* @version [版本, 2017-04-12]
*/
private static CacheManager getCacheManagerInstance() {
if (manager == null) {
synchronized (EhcacheUtil.class) {
if (manager == null) {
url = EhcacheUtil.class.getResource(PATH);
manager = CacheManager.create(url);
}
}
}
return manager;
}

/**
* [通过缓存名{cacheName}获取缓存对象]
*
* @author Chris li
* @version [版本, 2017-04-12]
*/
private static Cache getCache(String cacheName) {
Assert.notBlank(cacheName, "缓存名非法!");

Cache cache = getCacheManagerInstance().getCache(cacheName);
Assert.notNull(cache, "未找到对应的缓存对象[" + cacheName + "]!");
return cache;
}

/**
* [将{key:value}存到默认缓存[DefaultCache]中]
*
* @author Chris li
* @version [版本, 2017-04-12]
*/
public static void put(String key, Object value) {
put(DEFAULT_CACHE_NAME, key, value);
}

/**
* [将{key:value}存到默认缓存[DefaultCache]中,存活时间和钝化时间都为{timeToLiveSeconds}秒]
*
* @author Chris li
* @version [版本, 2017-04-12]
*/
public static void put(String key, Object value, int timeToLiveSeconds) {
put(DEFAULT_CACHE_NAME, key, value, timeToLiveSeconds);
}

/**
* [将{key:value}存到默认缓存[DefaultCache]中,存活时间{timeToLiveSeconds}秒,钝化时间{
* timeToIdleSeconds}秒]
*
* @author Chris li
* @version [版本, 2017-04-12]
*/
public static void put(String key, Object value, int timeToLiveSeconds, int timeToIdleSeconds) {
put(DEFAULT_CACHE_NAME, key, value, timeToLiveSeconds, timeToIdleSeconds);
}

/**
* [将{key:value}存到缓存{cacheName}中]
*
* @author Chris li
* @version [版本, 2017-04-12]
*/
public static void put(String cacheName, String key, Object value) {
Assert.notBlank(key, "缓存Key非法!");

synchronized (key.intern()) {
Cache cache = getCache(cacheName);
Element element = new Element(key, value);
cache.put(element);
}
}

/**
* [将{key:value}存到缓存{cacheName}中,存活时间和钝化时间都为{timeToLiveSeconds}秒]
*
* @author Chris li
* @version [版本, 2017-04-12]
*/
public static void put(String cacheName, String key, Object value, int timeToLiveSeconds) {
put(cacheName, key, value, timeToLiveSeconds, timeToLiveSeconds);
}

/**
* [将{key:value}存到缓存{cacheName}中,存活时间{timeToLiveSeconds}秒,钝化时间{
* timeToIdleSeconds}秒]
*
* @author Chris li
* @version [版本, 2017-04-12]
*/
public static void put(String cacheName, String key, Object value, int timeToLiveSeconds, int timeToIdleSeconds) {
Assert.notBlank(key, "缓存Key非法!");

synchronized (key.intern()) {
Cache cache = getCache(cacheName);
Element element = new Element(key, value);
element.setEternal(false);
element.setTimeToLive(timeToLiveSeconds);
element.setTimeToIdle(timeToIdleSeconds);
cache.put(element);
}
}

/**
* [从默认缓存[DefaultCache]中获取{key}对应的值]
*
* @author Chris li
* @version [版本, 2017-04-12]
*/
public static Object get(String key) {
return get(DEFAULT_CACHE_NAME, key);
}

/**
* [从缓存{cacheName}中获取{key}对应的值]
*
* @author Chris li
* @version [版本, 2017-04-12]
*/
public static Object get(String cacheName, String key) {
Assert.notBlank(key, "缓存Key非法!");

synchronized (key.intern()) {
Cache cache = getCache(cacheName);
Element element = cache.get(key);
return element == null ? null : element.getObjectValue();
}
}

/**
* [从默认缓存[DefaultCache]中移除{key}的缓存记录]
*
* @author Chris li
* @version [版本, 2017-04-12]
*/
public static void remove(String key) {
remove(DEFAULT_CACHE_NAME, key);
}

/**
* [从缓存{cacheName}中移除{key}的缓存记录]
*
* @author Chris li
* @version [版本, 2017-04-12]
*/
public static synchronized void remove(String cacheName, String key) {
Assert.notBlank(key, "缓存Key非法!");

getCache(cacheName).remove(key);
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值