java缓存(1、概述)

概述

对于程序员来说,听到缓存,一定会非常的亢奋,因为这年代,你去找工作,说不知道缓存,没用过缓存,都不好意思说自己是程序员,所以说缓存时一个非常热的话题,今天就讲一下自己关于缓存的理解,希望对于对大家有相应的帮助。

缓存概念

学习一个东西,我们首先应该清楚他是什么,那么,缓存到底是什么呢?缓存就是内存里面用于存放数据的空间,即,缓存就是内存。缓存的目的是什么呢?缓存就是为了优化程序查询IO数据,将程序经常从IO中查询的数据,保存到内存中,使程序直接操作内存即可获得数据,优化了程序等待IO数据的时间。

缓存的分类

缓存的分类可以有多种,这里讲的是以程序为中心进行划分的,缓存可分为:线程级缓存,进程级缓存,进程外缓存。

线程级缓存的生命周期是运行程序的一个线程的生命周期,jdk提供了相应的类,即ThreadLocal<T>。

进程级缓存的生成周期是运行程序的生命周期,程序启动就存在,程序停止,则缓存数据消失,这个sun公司没有提供相应的具体实现,不过,第三方提供了很多这样的框架,如:ehcache,oscache。

进程外缓存的生命周期是缓存服务器的生命周期,它的生命周期完全独立应用程序的,即使我们的应用程序停止运行了,只要我们的缓存服务器换运行者,那么,缓存数据就不会丢失,我们的程序再启动后,仍可以使用相应的缓存数据,现在缓存服务器也有很多,如:redis,memcached

缓存和对象池的区别

对象池这个概念相应大家不陌生,如果你做过和数据库交互的项目,一定会用到的,那就是jdbc的连接池,即数据库的连接池,常用的数据库连接的连接池框架有:c3p0,dbcp,proxool,druid,tomcat等服务器提供的连接池,对于这部分的内容大家可以看这篇博客:JDBC数据库连接池

上面以数据库连接池简单的说了一下池的概念,从上面,我们可以知道,对象池也是存放对象的内存,缓存也是,那么,为什么还要其来个不同的名字呢?这是因为这两个虽然在具体形式上一样,但是,其本质是不一样。

缓存存的对象都是轻量级的,一般都是数据对象,并且,这些对象是不同的,而对象池中的对象一般都是操作对象,重量级对象,并且都是相同的,之前没有搞懂缓存的对象怎么是不同的呢,后来想明白了,缓存中的数据是不同的,这个不同不是说他们的类型或者引用地址是不同的,而是说对象里面的数据是不同的。

java缓存和.net缓存

之前学习.net的时候,也学习过这块的内容,所以,在学习java的过程中,思想方面是没有什么问题的,主要的一些问题是在实现上,因为,在.net平台上,微软做了很好的集成,其提供了很多方面的缓存,如:页面缓存(局部,全部),线程缓存,进程缓存,以及进程外session缓存,都提供了相应的实现,我们只需要调用就行了,不要引入太多第三方的东西,但是,在java这块,动不动就需要引用第三方的东西,所以,在刚开始学习java的这块内容的时候,有点不太习惯,造成这个的因为是,.net是不开源的,java是开源的,当然,开源有开源带来的问题,不开源也有不开源的好处,再次不做评论。关于.net缓存的东西,大家可以查看我之前的博客。

总结

关于缓存,我们可以使用第三方的框架,也可自定义缓存,不论哪个级别的缓存,我们都可以自定义实现,之后的几篇博客,直接使用这些框架,做相应的demo。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-24 21:51:46

java缓存(1、概述)的相关文章

Java 缓存技术

以下仅是对map对方式讨论.没有对点阵图阵讨论.作缓存要做以下2点:  1:清理及更新缓存时机的处理: . 虚拟机内存不足,清理缓存 .. 缓存时间超时,或访问次数超出, 启动线程更新 2:类和方法的反射 (线程嵌套调用) reflect.invoke的使用. JAVA缓存有两种: 一.文件缓存,是指把数据存储在磁盘上,可以XML格式,也可以序列化文件DAT格式还是其它文件格式. 二.内存缓存,也就是实现一个类中静态Map,对这个Map进行常规的增删查. 代码如下:内存中的缓存 package

(转)java缓存技术,记录

http://blog.csdn.net/madun/article/details/8569860 最近再ITEYE上看到关于讨论JAVA缓存技术的帖子比较多,自己不懂,所以上网大概搜了下,找到一篇,暂作保存,后面如果有用到可以参考.此为转贴,帖子来处:http://cogipard.info/articles/cache-static-files-with-jnotify-and-ehcache 介绍 JNotify:http://jnotify.sourceforge.net/,通过JNI

Java缓存

Java中要用到缓存的地方很多,首当其冲的就是持久层缓存,针对持久层谈一下: 要实现java缓存有很多种方式,最简单的无非就是static HashMap,这个显然是基于内存缓存,一个map就可以搞定引用对象的缓存,最简单也最不实用,首要的问题就是保存对象的有效性以及周期无法控制,这样很容易就导致内存急剧上升,周期无法控制可以采用SoftReference,WeakReference,PhantomReference这三种对象来执行(看了Ibatis的缓存机制才发现JDK居然还提供了Phanto

java之集合概述

集合也称容器:从大的类别分成两类:Collection和Map,也即:单列和双列列表. java编程思想中一张图说明该体系的整体结构:其中黑色着重的类是经常使用的类. 1 Collection Collection:作为单列集合的根接口.该类集合的继承体系如下: Collection分为两大类:List和Set 1)List: 特点:有序的 collection(也称为序列):列表通常允许重复的元素.       List 接口提供了特殊的迭代器,称为 ListIterator,除了允许 Ite

JAVA缓存技术

最近再ITEYE上看到关于讨论JAVA缓存技术的帖子比较多,自己不懂,所以上网大概搜了下,找到一篇,暂作保存,后面如果有用到可以参考.此为转贴,帖子来处:http://cogipard.info/articles/cache-static-files-with-jnotify-and-ehcache 介绍 JNotify:http://jnotify.sourceforge.net/,通过JNI技术,让Java代码可以实时的监控制定文件夹内文件的变动信息,支持Linux/Windows/MacO

Java语法学习概述

Java语法学习概述: 1,数值型有:    整数类型分     byte:127到-128 8位(1个字节);只用后七位表示数字 第一位表            示正负号;特点最基本数据单元,占空间少 short:16位(2个字节)短整型 -32768到32767 int:32位(4个字节) 整型 正负21亿 写程序大部分用int写 long:64位(8个字节) 长整型 +-922后面16个零多           数字后面加字母L 或小写l 表示long型数据           用数字表示

针对Properties中实时性要求不高的配置参数,用Java缓存起来

Properties常用于项目中参数的配置,当项目中某段程序需要获取动态参数时,就从Properties中读取该参数,使程序是可配置的.灵活的. 有些配置参数要求立即生效,有些则未必: 一.实时性要求非常高.项目中,有些参数要求实时性非常高,即在系统运行中,IT人员修改了该参数值,该新参数值要求立即在程序中生效: 二.实时性要求不高.其实,并不是每个配置参数都要求实时性那么高,有些配置参数基本不会在项目运行当中修改,或即使在运行当中修改,也只要求其在下一次项目启动时生效. 针对第二种情况,鉴于程

Map实现java缓存机制的简单实例

缓存是Java中主要的内容,主要目的是缓解项目访问数据库的压力以及提升访问数据的效率,以下是通过Map实现java缓存的功能,并没有用cache相关框架. 一.缓存管理类 CacheMgr.java package com.henu.util; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map; imp

Java缓存流

//缓存数据流    @Test    public void testBufferReaderAndWriter() throws IOException{        //创建文件字符输入流        Reader in=new FileReader("abc.txt");        BufferedReader br=new BufferedReader(in);        Writer out=new FileWriter("abc4.txt"