浏览 1543 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-10-31
最后修改:2009-10-31
package com.ibatis.sqlmap.engine.cache.fifo; import java.util.Collections; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Properties; import com.ibatis.sqlmap.engine.cache.CacheController; import com.ibatis.sqlmap.engine.cache.CacheModel; /** * FIFO (first in, first out) cache controller implementation */ public class FifoCacheController implements CacheController { private int cacheSize; private Map cache; private List keyList; /** * Default constructor */ public FifoCacheController() { this.cacheSize = 100; //用Map放key value 可以用ConcurrentHashMap优化性能 this.cache = Collections.synchronizedMap(new HashMap()); //用LinkedList放key this.keyList = Collections.synchronizedList(new LinkedList()); } public int getCacheSize() { return cacheSize; } public void setCacheSize(int cacheSize) { this.cacheSize = cacheSize; } /** * Configures the cache * * @param props Optionally can contain properties [reference-type=WEAK|SOFT|STRONG] */ public void setProperties(Properties props) { String size = props.getProperty("cache-size"); if (size == null) { size = props.getProperty("size"); } if (size != null) { cacheSize = Integer.parseInt(size); } } /** * Add an object to the cache * * @param cacheModel The cacheModel * @param key The key of the object to be cached * @param value The object to be cached */ public void putObject(CacheModel cacheModel, Object key, Object value) { cache.put(key, value); keyList.add(key); //如果超过大小就删除头部元素 if (keyList.size() > cacheSize) { try { Object oldestKey = keyList.remove(0); cache.remove(oldestKey); } catch (IndexOutOfBoundsException e) { //ignore } } } /** * Get an object out of the cache. * * @param cacheModel The cache model * @param key The key of the object to be returned * @return The cached object (or null) */ public Object getObject(CacheModel cacheModel, Object key) { return cache.get(key); } public Object removeObject(CacheModel cacheModel, Object key) { keyList.remove(key); return cache.remove(key); } /** * Flushes the cache. * * @param cacheModel The cache model */ public void flush(CacheModel cacheModel) { cache.clear(); keyList.clear(); } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |