您的位置:首页 > 其它

程序开发中缓存的设计

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

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

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

注意:对于处理缓存的方法要是线程安全的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐