文档章节

Map在Java中构造缓存对象的原理及实现

gzh412163
 gzh412163
发布于 2014/06/13 10:05
字数 533
阅读 228
收藏 1
点赞 0
评论 0

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;

}
}


本文转载自:http://blog.csdn.net/caolipeng_918/article/details/13274775

共有 人打赏支持
gzh412163
粉丝 1
博文 69
码字总数 12796
作品 0
深圳
正确理解ThreadLocal

首先,ThreadLocal 不是用来解决共享对象的多线程访问问题的,一般情况下,通过ThreadLocal.set() 到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的。各个线程中...

Idiot_s_Sky
2014/01/04
0
0
Java反序列化漏洞的原理分析

  *本文原创作者:Moonlightos,本文属FreeBuf原创奖励计划,未经许可禁止转载   世界上有三件事最难:      把别人的钱装进自己的口袋里   把自己的想法装进别人的脑袋里   让自...

FreeBuf
05/04
0
0
ThreadLocal源码分析

阅读原文请访问我的博客 BrightLoong's Blog 一. 简介 提醒篇幅较大需耐心。 简介来自ThreadLocal类注释 ThreadLocal类提供了线程局部 (thread-local) 变量。这些变量与普通变量不同,每个线...

BrightLoong
05/28
0
0
实际项目中是选用Map还是选用Redis作为缓存?为什么?

参考网页 https://segmentfault.com/q/1010000009106416 实际项目中是选用Map还是选用Redis作为缓存?为什么? 具体选择Map还是Redis作为缓存,要看具体的需求,具体的应用场景 本地缓存和分...

karma123
06/27
0
0
JAVA中的强引用、弱引用、软引用、虚引用

1.对象的强、软、弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及(reachable)状态,程序才能使用它。从JDK...

向阳而生
2015/11/16
0
0
ThreadLocal 类用法讲解

首先,ThreadLocal 不是用来解决共享对象的多线程访问问题的,一般情况下,通过ThreadLocal.set() 到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的。各个线程中...

杨松坤
2012/11/25
0
0
带你了解源码中的 ThreadLocal

这次想来讲讲 ThreadLocal 这个很神奇的东西,最开始接触到这个是看了主席的《开发艺术探索》,后来是在研究 ViewRootImpl 中又碰到一次,而且还发现 Android 中一个小彩蛋,就越发觉得这个东...

请叫我大苏
前天
0
0
Java map双括号初始化方式的问题

关于Java双括号的初始化凡是确实很方便,特别是在常量文件中,无可替代。如下所示: Map map = new HashMap() {   {   put("Name", "Unmi");   put("QQ", "1125535");   } }; 好处很明...

Airship
2015/02/28
0
0
并行设计模式--Thread Specific Storge模式

多线程的不安全在于共享了变量实例,因此模式的思路是把变量与单一线程绑定,那么就不存在共享,自然就避免了加锁消耗以及其他高并发所需要的策略。 一般有两种策略:1. ThreadLocal策略,也...

java高级架构牛人
05/21
0
0
java基础专栏—DBUtils(2)

DBUtils 简化开发的冗余代码 QueryRunner中提供SQL语句操作API ResultSetHandler接口,用于定义select操作后怎样处理结果集 DBUtils对于一切事物的关闭类 是线程安全的 事务 将对个Sql操作封...

T-newcomer
2017/10/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Git 2.18版本发布:支持Git协议v2,提升性能

Git 2.18版本发布:支持Git协议v2,提升性能Git 2.18版本发布:支持Git协议v2,提升性能 新版本协议的主要驱动力是使 Git 服务端能够对各种 ref(分支与 tag)进行过滤操作。 这就意味着,G...

linux-tao
16分钟前
0
0
python浏览器自动化测试库【2018/7/22-更新】

64位py2.7版本 更新 document_GetResources 枚举页面资源 document_GetresourceText 获取指定url的内容 包括页面图片 下载地址下载地址 密码:upr47x...

开飞色
33分钟前
24
0
关于DCL双重锁失效及解决方案

关于DCL双重锁失效及解决方案 Double Check Lock (DCL)实现单例 DCL 方式实现单例的优点是既能够在需要时才初始化单例,又能够保证线程安全,且单例对象初始化后调用getInstance方法不进行...

DannyCoder
39分钟前
0
0
PowerDesigner 16.5 安装配置

PowerDesigner16.5破解版是一款业内领先且开发人员常用的数据库建模工具,PowerDesigner可以从物理和概念两个层面设计数据库,方便用户制作处清晰直观的数据流程图和结构模型,欢迎有需要的朋...

Gibbons
今天
0
0
mac Homebrew 指令积累

1通用命令 brew install [包名] //安装包 brew list //列举安装的包 brew info [包名] // 显示安装包的详细信息 mysql 相关 #启动mysql 服务 brew service start mysql my...

Kenny100120
今天
0
0
前端Tips: 创建, 发布自己的 Vue UI 组件库

创建, 发布自己的 Vue UI 组件库 前言 在使用 Vue 进行日常开发时, 我们经常会用到一些开源的 UI 库, 如: Element-UI, Vuetify 等. 只需一行命令, 即可方便的将这些库引入我们当前的项目: n...

ssthouse_hust
今天
1
0
大数据教程(2.13):keepalived+nginx(多主多活)高可用集群搭建教程【自动化脚本】

上一章节博主为大家介绍了目前大型互联网项目的keepalived+nginx(主备)高可用系统架构体系,相信大家应该看了博主的文章对keepalived/nginx技术已经有一定的了解,在本节博主将为大家分享k...

em_aaron
今天
5
0
Git 2.18版本发布:支持Git协议v2,提升性能

在最新的官方 Git 客户端正式版2.18中添加了对 Git wire 协议 v2 的支持,并引入了一些性能与 UI 改进的新特性。在 Git 的核心团队成员 Brandon Williams 公开宣布这一消息前几周,Git 协议 ...

六库科技
今天
0
0
Java8新特性之接口

在JDK8以前,我们定义接口类中,方法都是抽象的,并且不能存在静态方法。所有的方法命名规则基本上都是 public [返回类型] [方法名](参数params) throws [异常类型] {}。 JDK8为接口的定义带...

developlee的潇洒人生
今天
0
0
aop + annotation 实现统一日志记录

aop + annotation 实现统一日志记录 在开发中,我们可能需要记录异常日志。由于异常比较分散,每个 service 方法都可能发生异常,如果我们都去做处理,会出现很多重复编码,也不好维护。这种...

长安一梦
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部