Google guava cache使用樣例
package com.enniu.vdata.portal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import org.springframework.beans.factory.annotation.Autowired;
import com.enniu.vdata.biz.monitor.dama.DamaSearchBizImpl;
import com.enniu.vdata.common.mongodb.dama.DamaSearchCond;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.google.common.cache.RemovalListener;
import com.google.common.cache.RemovalNotification;
public
@Autowired
private DamaSearchBizImpl damaSearchBiz;
public static LoadingCache<Map, List<DamaSearchCond>>cache = null;
static {
cache = CacheBuilder.newBuilder()
// 設定大小,條目數
.maximumSize(10000)
// 設定時效時間,最後一次被訪問
.expireAfterAccess(2, TimeUnit.HOURS)
// 移除快取的監聽器
.removalListener(new RemovalListener<Map, List<DamaSearchCond>>() {
public void onRemoval(RemovalNotification<Map, List<DamaSearchCond>>notification) {
}
})
// 快取構建的回撥
.build(new CacheLoader<Map, List<DamaSearchCond>>() {// 載入快取
@Override
public List<DamaSearchCond> load(Mapkey) throws Exception {
List<DamaSearchCond> list =new ArrayList<DamaSearchCond>(1000);
return list;
}
});
cache.invalidateAll();
}
public List<DamaSearchCond> search(Map<String, Object>content) {
List<DamaSearchCond> results = null;
try {
if (cache.get(content) !=null && cache.get(content).size() > 0) {
results = cache.get(content);
} else {
cache.cleanUp();
results = damaSearchBiz.search(content);
cache.put(content,results);
}
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return results;
}
}
這篇文章介紹的不錯: http://outofmemory.cn/java/guava/cache/how-to-use-guava-cache