程序开发中缓存的设计
2013-03-18 10:07
197 查看
开发中使用到了缓存,用于将数据库中的数据保存到内存中,然后在查询的时候直接从内存中查出,而不用去连接数据库,从而提高效率。
我将缓存设计成了一个map,用于存储实体对象,key是这个类的id,value则是这个实体对象的引用。
然后在程序中直接使用这个缓存集合,对其进行增删改查操作,如:
但是在测试的时候,却出现了一些奇怪的问题,这个集合变成了null...(客户端代码不小心将这个集合赋成了null)
重新审查代码之后,将缓存处理类改成了如下形式:
将缓存集合改成private,final的,不可以更改其引用地址,而且又缓存类提供接口供程序调用。
这样做的好处:缓存集合对于外界是不可见的,可以避免被其他程序更改引用、同时如果今后想修改缓存的实现,如:使用文件形式,则可以继续使用现在提供的接口,不用修改客户端的代码。
注意:对于处理缓存的方法要是线程安全的。
我将缓存设计成了一个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的,不可以更改其引用地址,而且又缓存类提供接口供程序调用。
这样做的好处:缓存集合对于外界是不可见的,可以避免被其他程序更改引用、同时如果今后想修改缓存的实现,如:使用文件形式,则可以继续使用现在提供的接口,不用修改客户端的代码。
注意:对于处理缓存的方法要是线程安全的。
相关文章推荐
- 基于Java Processing的仿真程序界面设计开发
- 光盘勘误——《Visual C# 2005 程序开发与界面设计秘诀》
- 图解应用集成开发环境设计GUI程序-4
- 《Visual C# 2005 程序开发与界面设计秘诀》光盘勘误
- 亲密接触Java手机程序设计(二):配置手机程序开发环境――WTK
- 干货:小程序开发文档和设计指南要点详解
- Windows2000 服务器端应用程序开发设计指南-服务控制程序
- Visual C# 2005程序开发与界面设计秘诀——章立民作品
- 【原创】《Linux高级程序设计》杨宗德著 - 进程管理与程序开发 - Linux常见信号及处理 分类: Linux --- 应用程序设计 2014-11-08 11:54 68人阅读 评论(0) 收藏
- 【原创】《Linux高级程序设计》杨宗德著 - 进程管理与程序开发 - System V进程间通信之消息队列 分类: Linux --- 应用程序设计 2014-11-11 13:16 71人阅读 评论(0) 收藏
- 光盘勘误——《Visual C# 2005 程序开发与界面设计秘诀》
- VC++开发垃圾文件清理软件之三:程序的界面设计与实现----对话框界面
- 开发宝典:基于分布式对象的网游程序结构设计
- JAVA OOP思想设计开发的 空前版 带AI版 坦克大战程序,带音效。
- JPA下利于快速开发、快速调整业务的程序结构设计
- 中国象棋程序的设计与实现(七)--心得体会和开发日志
- Atitit.使用引擎加脚本架构的设计 使用php,js来开发桌面程序。。
- 支付宝小程序PHP全栈开发--前端样式的设计.acss样式详解
- 产品设计:Android应用-开发技术【数据缓存】
- MC55开发之GPRS远程登陆程序的具体设计(独家整理!保证是你见过的MC55开发最全的笔记~~)