程序開發中緩存的設計

    開發中使用到了緩存,用於將數據庫中的數據保存到內存中,然後在查詢的時候直接從內存中查出,而不用去連接數據庫,從而提高效率。

    我將緩存設計成了一個map,用於存儲實體對象,key是這個類的id,value則是這個實體對象的引用。

   

public class Cache {
	public static Map<String,BaseBO> cmCacheMap = new HashMap<String, BaseBO>();

}


    然後在程序中直接使用這個緩存集合,對其進行增刪改查操作,如:

Cache.cmCacheMap.put('key',new BaseBO);


    但是在測試的時候,卻出現了一些奇怪的問題,這個集合變成了null...(客戶端代碼不小心將這個集合賦成了null)

    重新審查代碼之後,將緩存處理類改成了如下形式:

public class Cache {
	
	private static final Map<String,BaseBO> cmCacheMap = new HashMap<String, BaseBO>();
	
	private final static String SIGN_STRING = "-";
	
	/**
	 * 設置緩存
	 *  
	 */
	public synchronized static void put(String id ,BaseBO bo) {
		cmCacheMap.put(bo.getId(), bo);
	}
	
	/**
	 * 設置全部緩存
	 *
	 */
	public synchronized static void putAllBaseBOs(Map<String,BaseBO> map) {
		if(map != null) {
			Cache.cmCacheMap.putAll(map);
		}
	}
	
	/**
	 * 清除緩存
	 */
	public synchronized static boolean remove(String id) {
		if (null != Cache.cmCacheMap.remove(id)) {
			return true;
		} else {
			return false;
		}
	}
	
}

    將緩存集合改成private,final的,不可以更改其引用地址,而且又緩存類提供接口供程序調用。

    這樣做的好處:緩存集合對於外界是不可見的,可以避免被其他程序更改引用、同時如果今後想修改緩存的實現,如:使用文件形式,則可以繼續使用現在提供的接口,不用修改客戶端的代碼。

    注意:對於處理緩存的方法要是線程安全的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章