程序开发中缓存的设计

    开发中使用到了缓存,用于将数据库中的数据保存到内存中,然后在查询的时候直接从内存中查出,而不用去连接数据库,从而提高效率。

    我将缓存设计成了一个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的,不可以更改其引用地址,而且又缓存类提供接口供程序调用。

    这样做的好处:缓存集合对于外界是不可见的,可以避免被其他程序更改引用、同时如果今后想修改缓存的实现,如:使用文件形式,则可以继续使用现在提供的接口,不用修改客户端的代码。

    注意:对于处理缓存的方法要是线程安全的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值