Map在Java中构造缓存对象的原理及实现
2013-10-27 21:23
489 查看
Map在Java中构造缓存对象的原理及实现
在实际的项目中,当我们对于某些数据需要经常去访问的时候,我们一般的做法都是将其数据放置到一个缓存(Cache)对象中去,可以达到使用空间节省时间的效果。同时,缓存的使用,也可以减少我们对硬盘或者数据库的频繁访问。达到了比较理想的效果。
这就是为什么我们在java中需要对某个对象设置缓存的原因(也即原理)。在Java中最常见的一种实现缓存的方式就是使用Map,而缓存的实现则主要分为三大步骤:
第一:先到缓存里面查找是否有我们需要的对象,若是存在,则直接返回。
第二:若是缓存里面没有该对象,则将其数据添加到缓存中去。以备下次使用。
第三:如果找到了相应的数据,或者是创建了相应的数据,那就直接使用这个数据。
然而,java中Map对象的key设置为String类型,也是为了查找的方便。
/**
* Java中缓存的基本实现示例
*/
public class JavaCache {
/**
* 缓存数据的容器,定义成Map是方便访问,直接根据Key就可以获取Value了
* key选用String是为了简单,方便演示
*/
private Map<String,Object> map = new HashMap<String,Object>();
private ObjectDao objectDao = null;//一般这个*Dao对象需要我们注入
/**
* 从缓存中获取值
* @param key 设置时候的key值
* @return key对应的Value值
*/
public Object getValue(String key){
//先从缓存里面取值
Object obj = map.get(key);
//判断缓存里面是否有值
if(obj == null){
//如果没有,那么就去获取相应的数据,比如读取数据库或者文件
obj =
objectDao.getObjectByKey(key);//这个方法是*Dao实现具体数据库查询的时候调用的方法
//把获取的值设置回到缓存里面
map.put(key, obj);
}
//如果有值了,就直接返回使用
return obj;
}
}
在实际的项目中,当我们对于某些数据需要经常去访问的时候,我们一般的做法都是将其数据放置到一个缓存(Cache)对象中去,可以达到使用空间节省时间的效果。同时,缓存的使用,也可以减少我们对硬盘或者数据库的频繁访问。达到了比较理想的效果。
这就是为什么我们在java中需要对某个对象设置缓存的原因(也即原理)。在Java中最常见的一种实现缓存的方式就是使用Map,而缓存的实现则主要分为三大步骤:
第一:先到缓存里面查找是否有我们需要的对象,若是存在,则直接返回。
第二:若是缓存里面没有该对象,则将其数据添加到缓存中去。以备下次使用。
第三:如果找到了相应的数据,或者是创建了相应的数据,那就直接使用这个数据。
然而,java中Map对象的key设置为String类型,也是为了查找的方便。
/**
* Java中缓存的基本实现示例
*/
public class JavaCache {
/**
* 缓存数据的容器,定义成Map是方便访问,直接根据Key就可以获取Value了
* key选用String是为了简单,方便演示
*/
private Map<String,Object> map = new HashMap<String,Object>();
private ObjectDao objectDao = null;//一般这个*Dao对象需要我们注入
/**
* 从缓存中获取值
* @param key 设置时候的key值
* @return key对应的Value值
*/
public Object getValue(String key){
//先从缓存里面取值
Object obj = map.get(key);
//判断缓存里面是否有值
if(obj == null){
//如果没有,那么就去获取相应的数据,比如读取数据库或者文件
obj =
objectDao.getObjectByKey(key);//这个方法是*Dao实现具体数据库查询的时候调用的方法
//把获取的值设置回到缓存里面
map.put(key, obj);
}
//如果有值了,就直接返回使用
return obj;
}
}
相关文章推荐
- Myeclipse8.5 反编译插件 jad 安装
- java类库的阅读笔记_jdk1.7.0_40_java.util.HashMap
- java设计模式之建造者模式
- SSH框架org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in
- 关于Struts2 namespace 的学习笔记(DMI动态方法调用)
- SSH框架Environment.<clinit>(652) | using JDK 1.4 java.sql.Timestamp handling卡死
- JAVA 学习之 Socket and ServerSocket
- 关于Java数组的12个最佳方法
- 单链表操作java实现
- java实现队列的练习
- Java Hour 15 以写小说的心态
- Java Hour 14 多线程基础
- 方法重建Overload和方法的重写Overriding的区别
- Android开发之Eclipse快捷键大全
- OpenJDK源码研究笔记(八)-详细解析如何读取Java字节码文件(.class)
- OpenJDK源码研究笔记(八)-详细解析如何读取Java字节码文件(.class)
- OpenJDK源码研究笔记(八)-详细解析如何读取Java字节码文件(.class)
- Eclipse插件开发-打开指定的向导
- 关于单例模式
- Java线程池使用说明