为什么用枚举?简单易用.比策略模式要简单清晰.我项目里就这几个地方用缓存.
先上xml
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">
<!-- 磁盘缓存位置 -->
<diskStore path="java.io.tmpdir/ehcache"/>
<!-- 默认缓存 -->
<defaultCache
maxEntriesLocalHeap="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
maxEntriesLocalDisk="10000000"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU">
<persistence strategy="localTempSwap"/>
</defaultCache>
<cache name="BUSINESS_REGEST_MAIL_UUID"
maxElementsInMemory="10000"
eternal="false"
timeToLiveSeconds="3600"
overflowToDisk="false"
memoryStoreEvictionPolicy="FIFO"/>
<cache name="BUSINESS_REGEST_USER_COUNT"
maxElementsInMemory="10000"
eternal="false"
timeToLiveSeconds="86400"
overflowToDisk="false"
memoryStoreEvictionPolicy="FIFO"/>
</ehcache>
然后是枚举
/**
* 缓存工具类,枚举的名字要和ehcache.xml里的名字一样
* @author dmw
*
* 2018年9月28日
*/
public enum CacheUtil {
/**
* 商家注册时,用户注册信息和邮箱里的uuid绑定缓存
*/
BUSINESS_REGEST_MAIL_UUID,
/**
* 商家注册时,用户每日扫码次数
*/
BUSINESS_REGEST_USER_COUNT;
private static CacheManager cacheManager ;
private Cache cache;
public void put(Object key,Object value){
Element e = new Element(key, value);
cache.put(e);
}
public Object get(Object key){
Element element = cache.get(key);
if (element != null){
return element.getObjectValue();
}
return null;
}
public void remove(Object key){
cache.remove(key);
}
static {
/**
* 初始化每个枚举类型的cache
*/
cacheManager = CacheManager.create(CacheUtil.class.getResource("ehcache.xml"));
CacheUtil[] values = CacheUtil.values();
for (CacheUtil cacheUtil : values) {
cacheUtil.cache = cacheManager.getCache(cacheUtil.name());
}
}
}