SlideShare a Scribd company logo
1 of 38
缓存技术浅谈 Robbin Fan
缓存是什么,解决什么问题? ,[object Object],[object Object]
基于 Web 应用的系统架构图 数据库 应用服务器 Web 服务器 存储设备 浏览器 Web 应用架构 操作系统的文件系统
Web 应用系统存在哪些速度差异? ,[object Object],[object Object],[object Object],[object Object],[object Object]
缓存技术分类 ,[object Object],[object Object],[object Object],[object Object],[object Object]
操作系统缓存概述 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Windows 的 Disk Cache
Linux 的 Disk Cache
数据库缓存的重要性 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Query Cache ,[object Object],[object Object],[object Object],[object Object],[object Object]
MySQL Query Cache 监控工具 ,[object Object],[object Object],[object Object]
Query Cache 状态示例 __ Query Cache ______________________________________________ Memory usage  25.77M of  64.00M  %Used:  40.26 Block Fragmnt  24.73% Hits  6.98M  3.2/s Inserts  100.87M  46.9/s Insrt:Prune  34.15:1  45.5/s Hit:Insert  0.07:1
Data Buffer ,[object Object],[object Object],[object Object],[object Object],[object Object]
MySQL buffer  监控工具 ,[object Object],[object Object],[object Object],[object Object]
InnoDB buffer 状态示例 __ InnoDB Buffer Pool ______________________________________ Usage  1000.00 of 1000.00  %Used: 100.00 Read hit  99.99% Pages Free  0  %Total:  0.00 Data  59.69k  93.26 % Drty:  0.02 Misc  4311  6.74 Latched  0  0.00 Reads  60.30G  28.0k/s From file  7.01M  3.3/s  0.01 Ahead Rnd  98684  0.0/s Ahead Sql  9548  0.0/s Writes  86.79M  40.3/s Flushes  14.08M  6.5/s Wait Free  0  0/s
应用程序缓存概述 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
对象缓存 ,[object Object],[object Object],[object Object]
对象缓存分类 ,[object Object],[object Object],[object Object]
Hibernate 对象缓存配置 @Entity  @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)  public class Forest { ... }  配置 entity 对象缓存 配置关联集合的缓存 @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)  @JoinColumn(name=&quot;CUST_ID&quot;)  @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)  public SortedSet<Ticket> getTickets() { return tickets; }  仅仅添加 Annotation 就可以了,无须编码,即可自动享受对象缓存。 Hibernate 会拦截对象的 CRUD 操作,针对对象读取操作进行缓存,针对对象修改操作自动清理缓存
Hibernate 二级缓存是提升 web 应用性能的法宝 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
查询缓存 ,[object Object],[object Object],[object Object]
Hibernate 查询缓存 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Hibernate 查询缓存特征 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
页面缓存 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
动态页面静态化 ,[object Object],[object Object],[object Object],[object Object]
Servlet 缓存 ,[object Object],[object Object],[object Object],[object Object]
OSCache Servlet 缓存示例 <filter> <filter-name>CacheFilter</filter-name> <filter-class>com.opensymphony.oscache.web.filter.CacheFilter</filter-class> <init-param> <param-name>time</param-name> <param-value>600</param-value> </init-param> <init-param> <param-name>scope</param-name> <param-value>session</param-value> </init-param> </filter> <filter-mapping> <filter-name>CacheFilter</filter-name> <url-pattern>/news/*</url-pattern> </filter-mapping>
页面局部缓存 ,[object Object],[object Object],[object Object]
OSCache 的页面局部缓存 <%@ taglib uri=&quot;http://www.opensymphony.com/oscache&quot; prefix=&quot;cache&quot; %>  <cache:cache> ... some jsp content ... </cache:cache> <cache:cache key=&quot;foobar&quot; scope=&quot;session&quot;> ... some jsp content ... </cache:cache> <cache:cache key=&quot;<%= product.getId() %>&quot; time=&quot;1800&quot; refresh=&quot;<%= needRefresh %>&quot;> ... some jsp content ... </cache:cache> <cache:cache key=&quot;<%= product.getId() %>&quot; cron=&quot;0 2 * * *&quot; refresh=&quot;<%= needRefresh %>&quot;> ... some jsp content ... </cache:cache>
应用缓存的缓存服务器 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
非 Java 实现的通用缓存产品 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Web 服务器端缓存技术 ,[object Object],[object Object],[object Object],[object Object],[object Object]
基于 AJAX 技术的浏览器缓存 ,[object Object],[object Object],[object Object]
未使用 AJAX 缓存代码 1. <script src=&quot;jQuery.js&quot;></script>  2.  <script language=&quot;JavaScript&quot;>  3.  <!--  4.  function gopage(option,obj){  5.  var page = $(&quot;#page&quot;).html() * 1;  6.  obj.disabled = true;  7.  if(option == '+'){  8.  page ++ ;  9.  var url = &quot;data.php?page=&quot;+page + &quot;&r=&quot;+Math.random();  10.  // 获取 ajax url ,后面的 random 是为了防止浏览器缓存 xml 内容  11.  }else{  12.  page --;  13.  if(page < 1)page =1;  14.  var url = &quot;data.php?page=&quot;+page + &quot;&r=&quot;+Math.random();  15.  16.  }  17.  $(&quot;#data&quot;).html(&quot;loading...&quot;);// 设置 loading 状态  18.  $(&quot;#page&quot;).html(page);  19. // 下面是 ajax 处理  20.  $(&quot;#data&quot;).load(url,  21.  {limit: 25},  22.  function() { obj.disabled = false; }  23.  );  24.  25.  }  26.  //-->  27.  </script>  28. <input value=&quot;<&quot; onclick=&quot;gopage('-',this)&quot; type=&quot;button&quot;>  29. <input value=&quot;>&quot; onclick=&quot;gopage('+',this)&quot; type=&quot;button&quot;>  30.  page:<span id=&quot;page&quot;>1</span>  31. <div style=&quot;border: 2px solid red; padding: 2px;&quot; id=&quot;data&quot;>data area</div>
使用 AJAX 缓存代码 # <script language=&quot;JavaScript&quot;>  #  <!--  # var cache_data = new Array();// 定义全局变量用来保存缓存数据  #  function gopageCache(option,obj){  #  var page = $(&quot;#page2&quot;).html() * 1;  #  if(option == '+'){  #  page ++ ;  #  var url = &quot;data.php?page=&quot;+page + &quot;&r=&quot;+Math.random();  #  }else{  #  page --;  #  if(page < 1)page =1;  #  var url = &quot;data.php?page=&quot;+page + &quot;&r=&quot;+Math.random();  #  #  }  # /* 下面是缓存增加的部分 */  #  if( (cache_data[page] !=null) && (cache_data[page].length > 1) ) {  # // 如果缓存存在 , 则直接调用缓存数据 , 不用再去服务器进行数据请求  #  alert('cache hit');  #  $(&quot;#data2&quot;).html(cache_data[page]);  #  $(&quot;#page2&quot;).html(page);  #  return true;  #  }  #  $(&quot;#page2&quot;).html(page);  #  obj.disabled = true;  #  $(&quot;#data2&quot;).html(&quot;loading(cache enabled)...&quot;);  #  $(&quot;#data2&quot;).load(url,  #  {limit: 25},  #  function(responseText) { obj.disabled = false;  #  cache_data[page] = responseText;// 将当前的数据存入到内存 ( 缓存变量 ) 中  }  #  );  #  #  }  #  #  //-->  #  </script>  # <input value=&quot;<&quot; onclick=&quot;gopageCache('-',this)&quot; type=&quot;button&quot;>  # <input value=&quot;>&quot; onclick=&quot;gopageCache('+',this)&quot; type=&quot;button&quot;>  #  page:<span id=&quot;page2&quot;>1</span>  # <div style=&quot;border: 2px solid red; padding: 2px;&quot; id=&quot;data2&quot;>data area</div>
基于 HTTP 协议的资源缓存 Etag  &quot;12523074“ Last-Modified  Thu, 29 May 2008 09:43:46 GMT /blog /blog If-Modified-Since  Thu, 29 May 2008 09:43:46 GMT If-None-Match  &quot;12523074   &quot; 304 Not Modified
基于资源的缓存示例 <filter> <filter-name>CacheFilterStaticContent</filter-name> <filter-class>com.opensymphony.oscache.web.filter.CacheFilter</filter-class> <init-param> <param-name>expires</param-name> <param-value>time</param-value> </init-param> </filter> <filter-mapping> <filter-name>CacheFilterStaticContent</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping>
谢 谢!

More Related Content

What's hot

我对后端优化的一点想法
我对后端优化的一点想法我对后端优化的一点想法
我对后端优化的一点想法mysqlops
 
浅谈 My sql 性能调优
浅谈 My sql 性能调优浅谈 My sql 性能调优
浅谈 My sql 性能调优thinkinlamp
 
HDInsight for Hadoopers
HDInsight for HadoopersHDInsight for Hadoopers
HDInsight for HadoopersKuo-Chun Su
 
Java Web 程式之效能技巧與安全防護
Java Web 程式之效能技巧與安全防護Java Web 程式之效能技巧與安全防護
Java Web 程式之效能技巧與安全防護Justin Lin
 
独爽不如众乐
独爽不如众乐独爽不如众乐
独爽不如众乐Zheng Biao
 
Web Caching Architecture and Design
Web Caching Architecture and DesignWeb Caching Architecture and Design
Web Caching Architecture and DesignHo Kim
 
Mongo db架构之优先方案
Mongo db架构之优先方案Mongo db架构之优先方案
Mongo db架构之优先方案Lucien Li
 
Mysql遇到的一些问题
Mysql遇到的一些问题Mysql遇到的一些问题
Mysql遇到的一些问题wang tongchao
 
Mybatis学习培训
Mybatis学习培训Mybatis学习培训
Mybatis学习培训flynofry
 
Oracle Data Buffer Cache
Oracle Data Buffer CacheOracle Data Buffer Cache
Oracle Data Buffer CacheSky Jian
 
【Ask maclean技术分享oracle数据库优化】awr鹰眼系列awr报告全面指标分析
【Ask maclean技术分享oracle数据库优化】awr鹰眼系列awr报告全面指标分析【Ask maclean技术分享oracle数据库优化】awr鹰眼系列awr报告全面指标分析
【Ask maclean技术分享oracle数据库优化】awr鹰眼系列awr报告全面指标分析maclean liu
 
Parse, cloud code 介紹
Parse, cloud code 介紹Parse, cloud code 介紹
Parse, cloud code 介紹wantingj
 
HDInsight for Microsoft Users
HDInsight for Microsoft UsersHDInsight for Microsoft Users
HDInsight for Microsoft UsersKuo-Chun Su
 
高性能LAMP程序设计
高性能LAMP程序设计高性能LAMP程序设计
高性能LAMP程序设计fuchaoqun
 
【第一季第四期】JavaScript Optimization
【第一季第四期】JavaScript Optimization【第一季第四期】JavaScript Optimization
【第一季第四期】JavaScript Optimizationtbosstraining
 
Mongo db部署架构之优先方案
Mongo db部署架构之优先方案Mongo db部署架构之优先方案
Mongo db部署架构之优先方案Lucien Li
 
Mongo db技术分享
Mongo db技术分享Mongo db技术分享
Mongo db技术分享晓锋 陈
 
Apache Zookeeper 分布式服务框架
Apache Zookeeper 分布式服务框架Apache Zookeeper 分布式服务框架
Apache Zookeeper 分布式服务框架Cabin WJ
 
D2 如何发现前端性能问题
D2 如何发现前端性能问题D2 如何发现前端性能问题
D2 如何发现前端性能问题aoao
 
A.oracle 查询结果的缓存问题
A.oracle 查询结果的缓存问题A.oracle 查询结果的缓存问题
A.oracle 查询结果的缓存问题WASecurity
 

What's hot (20)

我对后端优化的一点想法
我对后端优化的一点想法我对后端优化的一点想法
我对后端优化的一点想法
 
浅谈 My sql 性能调优
浅谈 My sql 性能调优浅谈 My sql 性能调优
浅谈 My sql 性能调优
 
HDInsight for Hadoopers
HDInsight for HadoopersHDInsight for Hadoopers
HDInsight for Hadoopers
 
Java Web 程式之效能技巧與安全防護
Java Web 程式之效能技巧與安全防護Java Web 程式之效能技巧與安全防護
Java Web 程式之效能技巧與安全防護
 
独爽不如众乐
独爽不如众乐独爽不如众乐
独爽不如众乐
 
Web Caching Architecture and Design
Web Caching Architecture and DesignWeb Caching Architecture and Design
Web Caching Architecture and Design
 
Mongo db架构之优先方案
Mongo db架构之优先方案Mongo db架构之优先方案
Mongo db架构之优先方案
 
Mysql遇到的一些问题
Mysql遇到的一些问题Mysql遇到的一些问题
Mysql遇到的一些问题
 
Mybatis学习培训
Mybatis学习培训Mybatis学习培训
Mybatis学习培训
 
Oracle Data Buffer Cache
Oracle Data Buffer CacheOracle Data Buffer Cache
Oracle Data Buffer Cache
 
【Ask maclean技术分享oracle数据库优化】awr鹰眼系列awr报告全面指标分析
【Ask maclean技术分享oracle数据库优化】awr鹰眼系列awr报告全面指标分析【Ask maclean技术分享oracle数据库优化】awr鹰眼系列awr报告全面指标分析
【Ask maclean技术分享oracle数据库优化】awr鹰眼系列awr报告全面指标分析
 
Parse, cloud code 介紹
Parse, cloud code 介紹Parse, cloud code 介紹
Parse, cloud code 介紹
 
HDInsight for Microsoft Users
HDInsight for Microsoft UsersHDInsight for Microsoft Users
HDInsight for Microsoft Users
 
高性能LAMP程序设计
高性能LAMP程序设计高性能LAMP程序设计
高性能LAMP程序设计
 
【第一季第四期】JavaScript Optimization
【第一季第四期】JavaScript Optimization【第一季第四期】JavaScript Optimization
【第一季第四期】JavaScript Optimization
 
Mongo db部署架构之优先方案
Mongo db部署架构之优先方案Mongo db部署架构之优先方案
Mongo db部署架构之优先方案
 
Mongo db技术分享
Mongo db技术分享Mongo db技术分享
Mongo db技术分享
 
Apache Zookeeper 分布式服务框架
Apache Zookeeper 分布式服务框架Apache Zookeeper 分布式服务框架
Apache Zookeeper 分布式服务框架
 
D2 如何发现前端性能问题
D2 如何发现前端性能问题D2 如何发现前端性能问题
D2 如何发现前端性能问题
 
A.oracle 查询结果的缓存问题
A.oracle 查询结果的缓存问题A.oracle 查询结果的缓存问题
A.oracle 查询结果的缓存问题
 

Viewers also liked

开源混合存储方案(Flashcache)
开源混合存储方案(Flashcache)开源混合存储方案(Flashcache)
开源混合存储方案(Flashcache)Feng Yu
 
Fast2016 liang ming-converged_storage_technology-final (1)
Fast2016 liang ming-converged_storage_technology-final (1)Fast2016 liang ming-converged_storage_technology-final (1)
Fast2016 liang ming-converged_storage_technology-final (1)Liang Ming
 
下一代虚拟存储解决方案:Vaai
下一代虚拟存储解决方案:Vaai下一代虚拟存储解决方案:Vaai
下一代虚拟存储解决方案:VaaiITband
 
Emc存储培训
Emc存储培训Emc存储培训
Emc存储培训Mq Sfs
 
关系数据库存储树形结构数据的理想实践 20100222
关系数据库存储树形结构数据的理想实践 20100222关系数据库存储树形结构数据的理想实践 20100222
关系数据库存储树形结构数据的理想实践 20100222Cabin WJ
 
结构化数据存储
结构化数据存储结构化数据存储
结构化数据存储光照 刘
 
华为软件定义存储架构分析
华为软件定义存储架构分析华为软件定义存储架构分析
华为软件定义存储架构分析Liang Ming
 
融合存储技术
融合存储技术融合存储技术
融合存储技术Liang Ming
 
Persona & Scenarios for Baidu Cloud - By Vanbin Fan 2012.12.25
Persona & Scenarios for Baidu Cloud - By Vanbin Fan 2012.12.25Persona & Scenarios for Baidu Cloud - By Vanbin Fan 2012.12.25
Persona & Scenarios for Baidu Cloud - By Vanbin Fan 2012.12.25Vanbin Fan, JWMI MBA
 
软件定义存储
软件定义存储软件定义存储
软件定义存储Liang Ming
 
Creating a Helpdesk Where None Exists
Creating a Helpdesk Where None ExistsCreating a Helpdesk Where None Exists
Creating a Helpdesk Where None ExistsElizabeth Nesius
 
The practices, challenges and opportunities of board composition and leadersh...
The practices, challenges and opportunities of board composition and leadersh...The practices, challenges and opportunities of board composition and leadersh...
The practices, challenges and opportunities of board composition and leadersh...Mohammed Farrag
 
4th grade curriculum night classroom 10 11
4th grade curriculum night classroom  10 114th grade curriculum night classroom  10 11
4th grade curriculum night classroom 10 11Bret Biornstad
 
2013 accenture-consumer-electronics-products-and-services-usage-report
2013 accenture-consumer-electronics-products-and-services-usage-report2013 accenture-consumer-electronics-products-and-services-usage-report
2013 accenture-consumer-electronics-products-and-services-usage-reportFrançois Avril
 
Wiki Technology By It Rocks
Wiki Technology By It RocksWiki Technology By It Rocks
Wiki Technology By It Rocksnaveenv
 

Viewers also liked (20)

开源混合存储方案(Flashcache)
开源混合存储方案(Flashcache)开源混合存储方案(Flashcache)
开源混合存储方案(Flashcache)
 
Fast2016 liang ming-converged_storage_technology-final (1)
Fast2016 liang ming-converged_storage_technology-final (1)Fast2016 liang ming-converged_storage_technology-final (1)
Fast2016 liang ming-converged_storage_technology-final (1)
 
下一代虚拟存储解决方案:Vaai
下一代虚拟存储解决方案:Vaai下一代虚拟存储解决方案:Vaai
下一代虚拟存储解决方案:Vaai
 
Emc存储培训
Emc存储培训Emc存储培训
Emc存储培训
 
关系数据库存储树形结构数据的理想实践 20100222
关系数据库存储树形结构数据的理想实践 20100222关系数据库存储树形结构数据的理想实践 20100222
关系数据库存储树形结构数据的理想实践 20100222
 
结构化数据存储
结构化数据存储结构化数据存储
结构化数据存储
 
华为软件定义存储架构分析
华为软件定义存储架构分析华为软件定义存储架构分析
华为软件定义存储架构分析
 
融合存储技术
融合存储技术融合存储技术
融合存储技术
 
Persona & Scenarios for Baidu Cloud - By Vanbin Fan 2012.12.25
Persona & Scenarios for Baidu Cloud - By Vanbin Fan 2012.12.25Persona & Scenarios for Baidu Cloud - By Vanbin Fan 2012.12.25
Persona & Scenarios for Baidu Cloud - By Vanbin Fan 2012.12.25
 
软件定义存储
软件定义存储软件定义存储
软件定义存储
 
Europe
EuropeEurope
Europe
 
Temple romà
Temple romàTemple romà
Temple romà
 
Creating a Helpdesk Where None Exists
Creating a Helpdesk Where None ExistsCreating a Helpdesk Where None Exists
Creating a Helpdesk Where None Exists
 
The practices, challenges and opportunities of board composition and leadersh...
The practices, challenges and opportunities of board composition and leadersh...The practices, challenges and opportunities of board composition and leadersh...
The practices, challenges and opportunities of board composition and leadersh...
 
4th grade curriculum night classroom 10 11
4th grade curriculum night classroom  10 114th grade curriculum night classroom  10 11
4th grade curriculum night classroom 10 11
 
Comparatives1
Comparatives1Comparatives1
Comparatives1
 
2013 accenture-consumer-electronics-products-and-services-usage-report
2013 accenture-consumer-electronics-products-and-services-usage-report2013 accenture-consumer-electronics-products-and-services-usage-report
2013 accenture-consumer-electronics-products-and-services-usage-report
 
Bando Start Up Er
Bando Start Up ErBando Start Up Er
Bando Start Up Er
 
Wiki Technology By It Rocks
Wiki Technology By It RocksWiki Technology By It Rocks
Wiki Technology By It Rocks
 
Sf 02S201test
Sf 02S201testSf 02S201test
Sf 02S201test
 

Similar to 缓存技术浅谈

高性能网站最佳实践
高性能网站最佳实践高性能网站最佳实践
高性能网站最佳实践longhao
 
Lamp高性能设计
Lamp高性能设计Lamp高性能设计
Lamp高性能设计锐 张
 
缓存基础
缓存基础缓存基础
缓存基础dynamiclu
 
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410maclean liu
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践self study
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践rewinx
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践Frank Cai
 
淘宝商品库MySQL优化实践
淘宝商品库MySQL优化实践淘宝商品库MySQL优化实践
淘宝商品库MySQL优化实践Feng Yu
 
浅析浏览器解析和渲染
浅析浏览器解析和渲染浅析浏览器解析和渲染
浅析浏览器解析和渲染Ailsa126
 
运维系统开发与Rails 3页面开发实践
运维系统开发与Rails 3页面开发实践运维系统开发与Rails 3页面开发实践
运维系统开发与Rails 3页面开发实践Li JianYe
 
非常靠谱 Html 5
非常靠谱 Html 5 非常靠谱 Html 5
非常靠谱 Html 5 Tony Deng
 
构建基于Lamp的网站架构
构建基于Lamp的网站架构构建基于Lamp的网站架构
构建基于Lamp的网站架构Cosey Lee
 
Huangjing renren
Huangjing renrenHuangjing renren
Huangjing renrend0nn9n
 
海量日志分析系统实践,Dba
海量日志分析系统实践,Dba海量日志分析系统实践,Dba
海量日志分析系统实践,DbaCevin Cheung
 
Altibase管理培训 安装篇
Altibase管理培训 安装篇Altibase管理培训 安装篇
Altibase管理培训 安装篇小新 制造
 
前端性能测试
前端性能测试前端性能测试
前端性能测试tbmallf2e
 
高性能Web服务器nginx及相关新技术的应用
高性能Web服务器nginx及相关新技术的应用高性能Web服务器nginx及相关新技术的应用
高性能Web服务器nginx及相关新技术的应用redhat9
 

Similar to 缓存技术浅谈 (20)

Berserk js
Berserk jsBerserk js
Berserk js
 
高性能网站最佳实践
高性能网站最佳实践高性能网站最佳实践
高性能网站最佳实践
 
Lamp高性能设计
Lamp高性能设计Lamp高性能设计
Lamp高性能设计
 
缓存基础
缓存基础缓存基础
缓存基础
 
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践
 
淘宝商品库MySQL优化实践
淘宝商品库MySQL优化实践淘宝商品库MySQL优化实践
淘宝商品库MySQL优化实践
 
浅析浏览器解析和渲染
浅析浏览器解析和渲染浅析浏览器解析和渲染
浅析浏览器解析和渲染
 
Php
PhpPhp
Php
 
运维系统开发与Rails 3页面开发实践
运维系统开发与Rails 3页面开发实践运维系统开发与Rails 3页面开发实践
运维系统开发与Rails 3页面开发实践
 
摘星
摘星摘星
摘星
 
非常靠谱 Html 5
非常靠谱 Html 5 非常靠谱 Html 5
非常靠谱 Html 5
 
构建基于Lamp的网站架构
构建基于Lamp的网站架构构建基于Lamp的网站架构
构建基于Lamp的网站架构
 
Huangjing renren
Huangjing renrenHuangjing renren
Huangjing renren
 
海量日志分析系统实践,Dba
海量日志分析系统实践,Dba海量日志分析系统实践,Dba
海量日志分析系统实践,Dba
 
Altibase管理培训 安装篇
Altibase管理培训 安装篇Altibase管理培训 安装篇
Altibase管理培训 安装篇
 
前端性能测试
前端性能测试前端性能测试
前端性能测试
 
高性能Web服务器nginx及相关新技术的应用
高性能Web服务器nginx及相关新技术的应用高性能Web服务器nginx及相关新技术的应用
高性能Web服务器nginx及相关新技术的应用
 

More from Robbin Fan

Web并发模型粗浅探讨
Web并发模型粗浅探讨Web并发模型粗浅探讨
Web并发模型粗浅探讨Robbin Fan
 
精益创业讨论
精益创业讨论精益创业讨论
精益创业讨论Robbin Fan
 
运营专业型社区的经验和反思
运营专业型社区的经验和反思运营专业型社区的经验和反思
运营专业型社区的经验和反思Robbin Fan
 
Social Game的技术挑战
Social Game的技术挑战Social Game的技术挑战
Social Game的技术挑战Robbin Fan
 
Challenge of SHIMANE - Example of use Ruby in Japanese regional government an...
Challenge of SHIMANE - Example of use Ruby in Japanese regional government an...Challenge of SHIMANE - Example of use Ruby in Japanese regional government an...
Challenge of SHIMANE - Example of use Ruby in Japanese regional government an...Robbin Fan
 
ruby on rails pitfalls
ruby on rails pitfallsruby on rails pitfalls
ruby on rails pitfallsRobbin Fan
 
Ruby In Enterprise Development
Ruby In Enterprise DevelopmentRuby In Enterprise Development
Ruby In Enterprise DevelopmentRobbin Fan
 
Maximes Presentation For Rubyconf China 2009
Maximes Presentation For Rubyconf China 2009Maximes Presentation For Rubyconf China 2009
Maximes Presentation For Rubyconf China 2009Robbin Fan
 
Design Pattern From Java To Ruby
Design Pattern    From Java To RubyDesign Pattern    From Java To Ruby
Design Pattern From Java To RubyRobbin Fan
 
Java Eye Architecture
Java Eye ArchitectureJava Eye Architecture
Java Eye ArchitectureRobbin Fan
 

More from Robbin Fan (11)

Web并发模型粗浅探讨
Web并发模型粗浅探讨Web并发模型粗浅探讨
Web并发模型粗浅探讨
 
精益创业讨论
精益创业讨论精益创业讨论
精益创业讨论
 
运营专业型社区的经验和反思
运营专业型社区的经验和反思运营专业型社区的经验和反思
运营专业型社区的经验和反思
 
Social Game的技术挑战
Social Game的技术挑战Social Game的技术挑战
Social Game的技术挑战
 
Challenge of SHIMANE - Example of use Ruby in Japanese regional government an...
Challenge of SHIMANE - Example of use Ruby in Japanese regional government an...Challenge of SHIMANE - Example of use Ruby in Japanese regional government an...
Challenge of SHIMANE - Example of use Ruby in Japanese regional government an...
 
ruby on rails pitfalls
ruby on rails pitfallsruby on rails pitfalls
ruby on rails pitfalls
 
Ruby In Enterprise Development
Ruby In Enterprise DevelopmentRuby In Enterprise Development
Ruby In Enterprise Development
 
Maximes Presentation For Rubyconf China 2009
Maximes Presentation For Rubyconf China 2009Maximes Presentation For Rubyconf China 2009
Maximes Presentation For Rubyconf China 2009
 
Why Ruby?
Why Ruby?Why Ruby?
Why Ruby?
 
Design Pattern From Java To Ruby
Design Pattern    From Java To RubyDesign Pattern    From Java To Ruby
Design Pattern From Java To Ruby
 
Java Eye Architecture
Java Eye ArchitectureJava Eye Architecture
Java Eye Architecture
 

缓存技术浅谈

  • 2.
  • 3. 基于 Web 应用的系统架构图 数据库 应用服务器 Web 服务器 存储设备 浏览器 Web 应用架构 操作系统的文件系统
  • 4.
  • 5.
  • 6.
  • 9.
  • 10.
  • 11.
  • 12. Query Cache 状态示例 __ Query Cache ______________________________________________ Memory usage 25.77M of 64.00M %Used: 40.26 Block Fragmnt 24.73% Hits 6.98M 3.2/s Inserts 100.87M 46.9/s Insrt:Prune 34.15:1 45.5/s Hit:Insert 0.07:1
  • 13.
  • 14.
  • 15. InnoDB buffer 状态示例 __ InnoDB Buffer Pool ______________________________________ Usage 1000.00 of 1000.00 %Used: 100.00 Read hit 99.99% Pages Free 0 %Total: 0.00 Data 59.69k 93.26 % Drty: 0.02 Misc 4311 6.74 Latched 0 0.00 Reads 60.30G 28.0k/s From file 7.01M 3.3/s 0.01 Ahead Rnd 98684 0.0/s Ahead Sql 9548 0.0/s Writes 86.79M 40.3/s Flushes 14.08M 6.5/s Wait Free 0 0/s
  • 16.
  • 17.
  • 18.
  • 19. Hibernate 对象缓存配置 @Entity @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) public class Forest { ... } 配置 entity 对象缓存 配置关联集合的缓存 @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER) @JoinColumn(name=&quot;CUST_ID&quot;) @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) public SortedSet<Ticket> getTickets() { return tickets; } 仅仅添加 Annotation 就可以了,无须编码,即可自动享受对象缓存。 Hibernate 会拦截对象的 CRUD 操作,针对对象读取操作进行缓存,针对对象修改操作自动清理缓存
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27. OSCache Servlet 缓存示例 <filter> <filter-name>CacheFilter</filter-name> <filter-class>com.opensymphony.oscache.web.filter.CacheFilter</filter-class> <init-param> <param-name>time</param-name> <param-value>600</param-value> </init-param> <init-param> <param-name>scope</param-name> <param-value>session</param-value> </init-param> </filter> <filter-mapping> <filter-name>CacheFilter</filter-name> <url-pattern>/news/*</url-pattern> </filter-mapping>
  • 28.
  • 29. OSCache 的页面局部缓存 <%@ taglib uri=&quot;http://www.opensymphony.com/oscache&quot; prefix=&quot;cache&quot; %> <cache:cache> ... some jsp content ... </cache:cache> <cache:cache key=&quot;foobar&quot; scope=&quot;session&quot;> ... some jsp content ... </cache:cache> <cache:cache key=&quot;<%= product.getId() %>&quot; time=&quot;1800&quot; refresh=&quot;<%= needRefresh %>&quot;> ... some jsp content ... </cache:cache> <cache:cache key=&quot;<%= product.getId() %>&quot; cron=&quot;0 2 * * *&quot; refresh=&quot;<%= needRefresh %>&quot;> ... some jsp content ... </cache:cache>
  • 30.
  • 31.
  • 32.
  • 33.
  • 34. 未使用 AJAX 缓存代码 1. <script src=&quot;jQuery.js&quot;></script> 2. <script language=&quot;JavaScript&quot;> 3. <!-- 4. function gopage(option,obj){ 5. var page = $(&quot;#page&quot;).html() * 1; 6. obj.disabled = true; 7. if(option == '+'){ 8. page ++ ; 9. var url = &quot;data.php?page=&quot;+page + &quot;&r=&quot;+Math.random(); 10. // 获取 ajax url ,后面的 random 是为了防止浏览器缓存 xml 内容 11. }else{ 12. page --; 13. if(page < 1)page =1; 14. var url = &quot;data.php?page=&quot;+page + &quot;&r=&quot;+Math.random(); 15. 16. } 17. $(&quot;#data&quot;).html(&quot;loading...&quot;);// 设置 loading 状态 18. $(&quot;#page&quot;).html(page); 19. // 下面是 ajax 处理 20. $(&quot;#data&quot;).load(url, 21. {limit: 25}, 22. function() { obj.disabled = false; } 23. ); 24. 25. } 26. //--> 27. </script> 28. <input value=&quot;<&quot; onclick=&quot;gopage('-',this)&quot; type=&quot;button&quot;> 29. <input value=&quot;>&quot; onclick=&quot;gopage('+',this)&quot; type=&quot;button&quot;> 30. page:<span id=&quot;page&quot;>1</span> 31. <div style=&quot;border: 2px solid red; padding: 2px;&quot; id=&quot;data&quot;>data area</div>
  • 35. 使用 AJAX 缓存代码 # <script language=&quot;JavaScript&quot;> # <!-- # var cache_data = new Array();// 定义全局变量用来保存缓存数据 # function gopageCache(option,obj){ # var page = $(&quot;#page2&quot;).html() * 1; # if(option == '+'){ # page ++ ; # var url = &quot;data.php?page=&quot;+page + &quot;&r=&quot;+Math.random(); # }else{ # page --; # if(page < 1)page =1; # var url = &quot;data.php?page=&quot;+page + &quot;&r=&quot;+Math.random(); # # } # /* 下面是缓存增加的部分 */ # if( (cache_data[page] !=null) && (cache_data[page].length > 1) ) { # // 如果缓存存在 , 则直接调用缓存数据 , 不用再去服务器进行数据请求 # alert('cache hit'); # $(&quot;#data2&quot;).html(cache_data[page]); # $(&quot;#page2&quot;).html(page); # return true; # } # $(&quot;#page2&quot;).html(page); # obj.disabled = true; # $(&quot;#data2&quot;).html(&quot;loading(cache enabled)...&quot;); # $(&quot;#data2&quot;).load(url, # {limit: 25}, # function(responseText) { obj.disabled = false; # cache_data[page] = responseText;// 将当前的数据存入到内存 ( 缓存变量 ) 中 } # ); # # } # # //--> # </script> # <input value=&quot;<&quot; onclick=&quot;gopageCache('-',this)&quot; type=&quot;button&quot;> # <input value=&quot;>&quot; onclick=&quot;gopageCache('+',this)&quot; type=&quot;button&quot;> # page:<span id=&quot;page2&quot;>1</span> # <div style=&quot;border: 2px solid red; padding: 2px;&quot; id=&quot;data2&quot;>data area</div>
  • 36. 基于 HTTP 协议的资源缓存 Etag &quot;12523074“ Last-Modified Thu, 29 May 2008 09:43:46 GMT /blog /blog If-Modified-Since Thu, 29 May 2008 09:43:46 GMT If-None-Match &quot;12523074 &quot; 304 Not Modified
  • 37. 基于资源的缓存示例 <filter> <filter-name>CacheFilterStaticContent</filter-name> <filter-class>com.opensymphony.oscache.web.filter.CacheFilter</filter-class> <init-param> <param-name>expires</param-name> <param-value>time</param-value> </init-param> </filter> <filter-mapping> <filter-name>CacheFilterStaticContent</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping>