Cache 简介
一、什么是缓存
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技术的页面
原文:http://blog.csdn.net/baidu_33497625/article/details/50801571
一、什么是缓存
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技术的页面
Cache 简介的更多相关文章
- Spring Cache 简介
org.springframework.cache; org.springframework.cache.Cache org.springframework.cache.CacheManager 依赖 ...
- Redis Cache 简介
Microsoft Azure Redis Cache 是基于流行的开源Redis Cache 1.Microsoft Azure Redis Cache 可分为以下几个级别: Basic – 单节点 ...
- 001-spring cache 简介
一.概述 参看地址: 自3.1版以来,Spring Framework提供了对现有Spring应用程序透明地添加缓存的支持.与事务支持类似,缓存抽象允许一致地使用各种缓存解决方案,而对代码的影响最小. ...
- HTML5应用程序缓存Application Cache
什么是Application Cache HTML5引入了应用程序缓存技术,意味着web应用可进行缓存,并在没有网络的情况下使用,通过创建cache manifest文件,可以轻松的创建离线应用. A ...
- HTML5应用程序缓存Application Cache详解
什么是Application Cache HTML5引入了应用程序缓存技术,意味着web应用可进行缓存,并在没有网络的情况下使用,通过创建cache manifest文件,可以轻松的创建离线应用. A ...
- 使用Azure Redis Cache
通过上一篇博客<Redis Cache 简介>我们已经简单了解了Azure Redis Cache,这里就不过多赘述了. 1.创建Redis Cache 创建Redis Cache之前,我 ...
- cache 的设计与实现--转载
本文整理自一下两篇博客:http://my.oschina.net/ScottYang/blog/298727http://my.oschina.net/u/866190/blog/188712 Ca ...
- memory cache 和 disk cache
memory cache简介:MemoryCache顾名思义,就是将资源缓存到内存中,等待下次访问时不需要重新下载资源,而直接从内存中获取.Webkit早已支持memoryCache. 目前Webki ...
- HTML5应用程序缓存Application Cache详解.RP
什么是Application Cache HTML5引入了应用程序缓存技术,意味着web应用可进行缓存,并在没有网络的情况下使用,通过创建cache manifest文件,可以轻松的创建离线应用. A ...
随机推荐
- [luoguP3159] [CQOI2012]交换棋子(最小费用最大流)
传送门 好难的网络流啊,建图真的超难. 如果不告诉我是网络流的话,我估计就会写dfs了. 使用费用流解决本题,设点 $p[i][j]$ 的参与交换的次数上限为 $v[i][j]$ ,以下为建图方式: ...
- [BZOJ3054] Rainbow的信号(考虑位运算 + DP?)
传送门 BZOJ没数据范围... 其实数据范围是这样的.. 前20%可以直接n^3暴力枚举每个区间 前40%可以考虑每一位,因为所有数每一位都是独立的,而和的期望=期望的和,那么可以枚举每一位,再枚举 ...
- [BZOJ1578] [Usaco2009 Feb]Stock Market 股票市场(DP)
传送门 可以看出 第一天买,第三天卖 == 第一天买,第二天卖完再买,第三天卖 所以我们只考虑前一天买,后一天卖即可 那么有按天数来划分 f[i][j]表示前i天,共有j元,最大的盈利 第一维可以省去 ...
- BZOJ 3749: [POI2015]Łasuchy【动态规划】
Description 圆桌上摆放着n份食物,围成一圈,第i份食物所含热量为c[i]. 相邻两份食物之间坐着一个人,共有n个人.每个人有两种选择,吃自己左边或者右边的食物.如果两个人选择了同一份食物, ...
- 算法复习——2—sat(bzoj2199)
题目: Description 由于对Farmer John的领导感到极其不悦,奶牛们退出了农场,组建了奶牛议会.议会以“每头牛 都可以获得自己想要的”为原则,建立了下面的投票系统: M只到场的奶牛 ...
- 解决mybatis xml文件代码提示
今天在开源项目社区看到一个插件挺不错的,推荐给大家.叫MyBatis MyBatis 是一个流行的 Java 数据持久层框架.MyBatipse 是一个 Eclipse 插件,在编辑 MyBatis ...
- Android Studio升级到3.0,抛出Aapt2Exception异常
android studiao错误: Android resource linking failedOutput: D:\_ASWorkSpace\phone_new\app\src\main\res ...
- 济南学习 Day 5 T2 晚
等比数列(sequence) [题目描述] 判断一个数列是否为等比数列. 等比数列的定义为能被表示成a,aq,aq^2,aq^3...的数列,其中a和q不等于0. [输入说明] 输入文件的第一行有一个 ...
- spring boot--常用配置
spring boot 需要引用的依赖项: spring-boot-starter-parent // 所有Spring Boot组件的基础引用 spring-boot-starter-web // ...
- Highcharts 动态制作3D柱状图
学习参考菜鸟网站:http://www.runoob.com/highcharts/highcharts-tutorial.html 我是通过后端返回设备数据,进行前端出图,效果如下: 代码如下: d ...