缓存

一、什么是缓存?

  1.缓存Cache是高速缓冲存储器,一种特殊的存储器子系统,其中复制了我们频繁需要操作的数据使得这些数据可以快速的访问。

  2.凡是位于速度相差比较大的两种硬件或软件之间的,用于协调两者数据之间传输速度差异的结构,我们都可以称之为缓存Cache.

二、缓存分类

  1. 基于web应用的架构图

  

 

 

   这个图可以简单的理解:浏览器发送一个http请求到Web服务器,Web服务器通过应用服务器去查询数据库中的数据,数据库通过IO访问磁盘文件查询数据。

  那么其实在 浏览器和服务器之间、服务器与服务器之间、服务器与数据库之间都可以加入缓存。

  数据库与存储设备之间:通过加入缓存,那么就减少了磁盘文件IO的操作

  应用服务器与数据库之间:减少对数据库查询的操作,这个是比较常用的

  客户端与Web服务器之间:减少对网站的访问,这个我倒是没见过,一般用nginx负载均衡

三、操作系统缓存

  1.文件系统提供的磁盘缓存Disk Cache:操作习题会把经常访问到的文件内容放到内存中,由文件系统来管理。

  2.当应用程序通过文件系统访问磁盘文件时候,操作系统会从Disk Cache读取文件数据,这样就加快了文件访问的速度。

  3.Disk Cache 由操作系统来管理,一般不需要人工干预,但应保证物理内存充足,以便操作系统可以使用更多的内存来缓存数据。

四、数据库缓存

  1.重要性

  • 数据库通常是企业应用系统最核心的部分
  • 数据库保存的数据量一般很庞大
  • 数据库查询操作频繁
  • 上述原因会导致数据库查询频繁的进行磁盘IO操作,使得数据库性能下降

  2.缓存策略

    a、Query Cache

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

       b、Data Buffer

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

五、应用程序缓存

1、对象缓存

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

2、查询缓存

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

3、页面缓存

     a、作用

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

    b、分类

         I、动态页面静态化

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

        II、Servlet缓存

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

        III、页面内部缓存

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

 

六、web服务器端缓存

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

七、基于ajax的浏览器缓存

  1. 使用AJAX调用的时候,将数据库在浏览器端缓存
  2. 只要不离开当前页面,不刷新当前页面,就可以直接读取缓存数据
  3. 只适用于使用AJAX技术的页面
csdn:https://blog.csdn.net/weixin_44185666

 

posted @ 2020-07-29 10:50  圣-保罗  阅读(108)  评论(0)    收藏  举报