一、什么是缓存
1、Cache是高速缓冲存储器 一种特殊的存储器子系统,其中复制了频繁使用的数据以利于快速访问
2、凡是位于速度相差较大的两种硬件/软件之间的,用于协调两者数据传输速度差异的结构,均可称之为 Cache

二、缓存的分类
1、基于web应用的系统架构图

2、在系统架构的不同层级之间,为了加快访问速度,都可以存在缓存

  • 操作系统磁盘缓存->减少磁盘机械操作
  • 数据库缓存->减少文件系统I/O
  • 应用程序缓存->减少对数据库的查询
  • Web服务器缓存->减少应用服务器请求
  • 客户端浏览器缓存->减少对网站的访问

三、操作系统缓存
1、文件系统提供的Disk Cache:操作系统会把经常访问到的文件内容放入到内存当中,由文件系统来管理
2、当应用程序通过文件系统访问磁盘文件的时候,操作系统从Disk Cache当中读取文件内容,加速了文件读取速度
3、Disk Cache由操作系统来自动管理,一般不用人工干预,但应当保证物理内存充足,以便于操作系统可以使用尽量多的内存充当Disk Cache,加速文件读取速度
4、特殊的应用程序对文件系统Disk Cache有很高的要求,会绕开文件系统Disk Cache,直接访问磁盘分区,自己实现Disk 
5、Cache策略

  • Oracle的raw device(裸设备) – 直接抛弃文件系统
  • MySQL的InnoDB: innodb_flush_method = O_DIRECT

四、数据库缓存
1、重要性

  • 数据库通常是企业应用系统最核心的部分
  • 数据库保存的数据量通常非常庞大
  • 数据库查询操作通常很频繁,有时还很复杂
  • 以上原因造成数据库查询会引起非常频繁的磁盘I/O读取操作,迫使CPU挂起等待,数据库性能极度低下

2、缓存策略
     a、Query Cache

    • 以SQL作为key值缓存查询结果集
    • 一旦查询涉及的表记录被修改,缓存就会被自动删除
    • 设置合适的Query Cache会极大提高数据库性能
    • Query Cache并非越大越好,过大的Qquery Cache会浪费内存。
    • MySQL: query_cache_size= 128M

b、Data Buffer

    • data buffer是数据库数据在内存中的容器
    • data buffer的命中率直接决定了数据库的性能
    • data buffer越大越好,多多益善
    • MySQL的InnoDB buffer:innodb_buffer_pool_size = 2G
    • MySQL建议buffer pool开大到服务器物理内存60-80%

五、应用程序缓存
1、对象缓存

  • 由O/R Mapping框架例如Hibernate提供,透明性访问,细颗粒度缓存数据库查询结果,无需业务代码显式编程,是最省事的缓存策略
  • 当软件结构按照O/R Mapping框架的要求进行针对性设计,使用对象缓存将会极大降低Web系统对于数据库的访问请求
  • 良好的设计数据库结构和利用对象缓存,能够提供极高的性能,对象缓存适合OLTP(联机事务处理)应用

2、查询缓存

  • 对数据库查询结果集进行缓存,类似数据库的Query Cache
  • 适用于一些耗时,但是时效性要求比较低的场景。查询缓存和对象缓存适用的场景不一样,是互为补充的
  • 当查询结果集涉及的表记录被修改以后,需要注意清理缓存

3、页面缓存
     a、作用

    • 针对页面的缓存技术不但可以减轻数据库服务器压力,还可以减轻应用服务器压力
    • 好的页面缓存可以极大提高页面渲染速度
    • 页面缓存的难点在于如何清理过期的缓存

b、分类
         I、动态页面静态化

    • 利用模板技术将访问过一次的动态页面生成静态html,同时修改页面链接,下一次请求直接访问静态链接页面
    • 动态页面静态化技术的广泛应用于互联网CMS/新闻类Web应用,但也有BBS应用使用该技术,例如Discuz!
    • 无法进行权限验证,无法显示个性化信息
    • 可以使用AJAX请求弥补动态页面静态化的某些缺点

II、Servlet缓存

      • 针对URL访问返回的页面结果进行缓存,适用于粗粒度的页面缓存,例如新闻发布
      • 可以进行权限的检查
      • OScache提供了简单的Servlet缓存(通过web.xml中的配置)
      • 也可以自己编程实现Servlet缓存

III、页面内部缓存

        • 针对动态页面的局部片断内容进行缓存,适用于一些个性化但不经常更新的页面(例如博客)
        • OSCache提供了简单的页面缓存
        • 可以自行扩展JSP Tag实现页面局部缓存

六、web服务器端缓存

      • 基于代理服务器模式的Web服务器端缓存,如squid/nginx
      • Web服务器缓存技术被用来实现CDN(内容分发网络 content delivery network)
      • 被国内主流门户网站大量采用
      • 不需要编程,但仅限于新闻发布类网站,页面实时性要求不高

七、基于ajax的浏览器缓存

      • 使用AJAX调用的时候,将数据库在浏览器端缓存
      • 只要不离开当前页面,不刷新当前页面,就可以直接读取缓存数据
      • 只适用于使用AJAX技术的页面

java缓存技术的介绍的更多相关文章

  1. (转)java缓存技术,记录

    http://blog.csdn.net/madun/article/details/8569860 最近再ITEYE上看到关于讨论JAVA缓存技术的帖子比较多,自己不懂,所以上网大概搜了下,找到一篇 ...

  2. JAVA缓存技术之EhCache

    最近再ITEYE上看到关于讨论JAVA缓存技术的帖子比较多,自己不懂,所以上网大概搜了下,找到一篇,暂作保存,后面如果有用到可以参考.此为转贴,帖子来处:http://cogipard.info/ar ...

  3. JAVA缓存技术之EhCache(转)

    最近再ITEYE上看到关于讨论JAVA缓存技术的帖子比较多,自己不懂,所以上网大概搜了下,找到一篇,暂作保存,后面如果有用到可以参考.此为转贴,帖子来处:http://cogipard.info/ar ...

  4. JAVA缓存技术

    介绍 JNotify:http://jnotify.sourceforge.net/,通过JNI技术,让Java代码可以实时的监控制定文件夹内文件的变动信息,支持Linux/Windows/MacOS ...

  5. Java分布式应用技术架构介绍

    分布式架构的演进 系统架构演化历程-初始阶段架构

  6. Java 缓存技术

    以下仅是对map对方式讨论.没有对点阵图阵讨论.作缓存要做以下2点:  1:清理及更新缓存时机的处理: . 虚拟机内存不足,清理缓存 .. 缓存时间超时,或访问次数超出, 启动线程更新 2:类和方法的 ...

  7. java缓存技术(转)

    最近在做java缓存,了解了一下.以下仅是对map对方式讨论.没有对点阵图阵讨论.作缓存要做以下2点: 1:清理及更新缓存时机的处理:   . 虚拟机内存不足,清理缓存   .. 缓存时间超时,或访问 ...

  8. 干货|java缓存技术详解

    一.缓存是什么? 请点击此处输入图片描述 Cache ①高速缓冲存储器,其中复制了频繁使用的数据以利于快速访问. ②位于速度相差较大的两种硬件/软件之间,用于协调两者数据传输速度差异的结构 二.缓存有 ...

  9. Spring Cache缓存技术的介绍

    缓存用于提升系统的性能,特别适用于一些对资源需求比较高的操作.本文介绍如何基于spring boot cache技术,使用caffeine作为具体的缓存实现,对操作的结果进行缓存. demo场景 本d ...

随机推荐

  1. java设计模式学习

    每次面试都需要看设计模式,每次都很好的理解了,但是实际开发中没有应用总是忘记.现在把它汇总一下. 二十三种设计模式 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模 ...

  2. 导入另一个 Git库到现有的Git库并保留提交记录

    在要合并到的目标git仓库,执行 "git pull  远程分支地址/本地git仓库根目录"

  3. vuejs组件库pk介绍

    vuejs可以说是近2年多以来最火的前端框架,随之而来就产生了非常多的组件库,我们来看看其中比较著名和人气旺盛的几个 1. Vuetify-符合material design设计理念, star数量7 ...

  4. MySQL 8.0 —— 数据字典

    1.简介 MySQL 8.0 将数据库元信息都存放于InnoDB存储引擎表中,在之前版本的MySQL中,数据字典不仅仅存放于特定的存储引擎表中,还存放于元数据文件.非事务性存储引擎表中.本文将会介绍M ...

  5. 09LaTeX学习系列之---Latex 字体的设置

    目录 目录: (一) 字体族的设置 1.说明: 2.源代码: 3.输出结果: (二) 字体系列的设置 1.源代码: 2.输出效果: (三) 字体形状的设置 1.源代码: 2.输出效果: (四) 字体大 ...

  6. Team Dipper

    Team Dipper Dipper 来自追梦的7星,We Are From Now On! 说什么?图小了?没问题满足你! No.1 沉默深邃之境的术士,源自奥术之境的PHP探寻者 03150225 ...

  7. 【Beta Scrum】冲刺!5/5

    1. 今日完成情况 人员 学号 分工 是否完成 完成情况 胡武成 031502610 解决短信内容,辅助web端解决在线编辑 Y 短信已解决,在线编辑已有解决方案 郭剑南 031502609 修改we ...

  8. [项目实践] python文件路径引用的规则,记一次使用sys.path[0]的问题,及如何区分 ../与 ./的使用场景

    下面是一个获取配置的代码 def getValue(self,section,option): """ @file: string,the name of the con ...

  9. 使用requests模块post payload请求

    import json import requests import datetime postUrl = 'https://sellercentral.amazon.com/fba/profitab ...

  10. mybatis的xml映射文件

    1,在进行统计查询时候,不想写映射的实体类,这时候设置返回的resultType类型是map <select id="getMap" resultType="jav ...