1. 程式人生 > 實用技巧 >快取工具類(使用ConcurrentMap集合實現)

快取工具類(使用ConcurrentMap集合實現)

public class Cache {

    static ConcurrentMap<String, Cache> datas = new  ConcurrentHashMap<String, Cache>();//快取集合
    static long pMaxTime=1000*60*5;//最大快取時間(毫秒)
    
    private Cache(String key,Object data,long maxTime){
        this.key=key;
        this.time=System.currentTimeMillis();
        
this.data=data; this.maxTime=maxTime; } String key;//鍵值 long time;//快取時間 long maxTime;//最大快取時間(毫秒) Object data=null; //判斷時間是否超時 public boolean checkTimeIn(){ return System.currentTimeMillis()-time<maxTime; //return false; } //獲取快取 static
public Object getData(String key){ Cache c = datas.get(key); if(c==null || !c.checkTimeIn()) return null; else return c.data; } //設定快取 static public void setData(String key,Object data){ setData(key,data,pMaxTime); }
//設定快取 static public void setData(String key,Object data,long maxTime){ datas.remove(key); datas.put(key, new Cache(key,data,maxTime)); } //移除指定key的快取 static public void removeData(String key){ datas.remove(key); } //清除超時快取 static public void removeOutTimeData(){ for(Cache c : datas.values()){ if(!c.checkTimeIn()) datas.remove(c.key); } } //當前數量 static public int size(){ return datas.size(); } }
View Code

  注:使用此類進行公共資料快取,最好做個定時器清除一下超時資料(直接呼叫此方法Cache.removeOutTimeData();)。