开发WEB应用中,缓存的不同阶段

字体: | 打印

一个WEB页面从发起请求到最终显示请求结果,中间的各个节点是我们开发人员可以控制缓存的;因为最近看大家都在讨论 模板缓存 似乎都很入迷,
所以我出来浇盆冷水:别滥用、烂用缓存! 好的缓存技术是一系列缓存技术的组合应用

一、利用HTTP协议
     模拟静态页面的 Header 控制 Last-Modify、Expires、Pragma 、Cache-Control 等 HTTP 头信息,利用 304 消息告诉浏览器继续使用本地缓存
     一般这种缓存在动态页面的控制中使用几秒以内,适当的减轻服务器的负担

二、利用反向代理
     这个在大型门户应用中会应用到。本质也是缓存了页面内容,只是分布到了多个输出服务器,分散了压力。

三、利用页面缓存 和 内容缓存
      页面缓存和浏览器缓存的内容基本类似,只是在服务端缓存了,不用每次都重新渲染;适合于WEB首页等允许一定时间内不变的页面
      (这种就是我们常见的模板缓存技术)
      当然这个节点还有把内容直接生成静态页面的内容缓存方式

四、数据缓存
     数据缓存,说白了就是相对数据存储而言,不是每次都从实际存储中获得最新的数据,而是有组织的把可以缓存的数据线保存在比较快速的物理设备上
     如:内存。数据的组织、需求也是更具项目、页面等具体情况而详细制定的。
     如果是用 MVC 开发模式的,有 在MODEL中封装了缓存的机制的,也有在 V 中设计了在 V与M沟通时,中间加入了 V 对M调用的缓存的机制
   (我目前开发的项目中就是使用这个方式,好处是控制比较细腻,缺点是对V层开发人员有要求)

     在这个节点可以利用的缓存工具很多,常见的有 Memache、APC 等 ... 说白了就是利用内存来换取时间 ...

五、Query-Cache
     这是数据库查询缓存,由数据库自身的机制实现;开发人员或DBA主要是在配置数据库服务的时候,更具项目的应用情况,具体的配置。
     (这里顺便搭一句:好的开发人员应该也是一个好的DBA)


我讲的比较浅显,只是希望大家能更加全面一点来看待WEB应用的开发 。。。

希望大家不要喷口水

[ 本帖最后由 terry39 于 2008-7-8 23:51 编辑 ]

我也来说两句 查看全部评论 相关评论

  • thaiki (2008-7-03 15:51:07)

    恩  种类比较全了。。。
    有个叫xcache的 装linux 下装 php 网上搜到的
  • airwin (2008-7-03 15:52:58)


    总结的很全面哈~~支持
  • fyland (2008-7-03 16:02:48)

    建议版主加精!
  • 帅的不能再输啦 (2008-7-03 17:57:33)

    不错不错。
  • blankyao (2008-7-03 23:29:13)

    如果能深入些就更好了
  • kimyang (2008-7-04 09:27:04)

    terry的帖子一定要顶~~!
  • slawdan (2008-7-04 11:19:21)

    好的开发不见得非得是好的DBA……DBA要做的事情很多,远远超过规划\维护数据、编写存储函数这些工作~~很多东西不是一个开发人员在有限的时间里能做到的~
  • 我要读书网 (2008-7-04 15:42:38)

    什么叫滥用缓存?
  • fhjr999 (2008-7-04 15:47:36)

    三、利用页面缓存 和 内容缓存
          页面缓存和浏览器缓存的内容基本类似,只是在服务端缓存了,不用每次都重新渲染;适合于WEB首页等允许一定时间内不变的页面
          (这种就是我们常见的模板缓存技术)
          当然这个节点还有把内容直接生成静态页面的内容缓存方式
    =====================================================================
    这里怎么感觉不大对。
    模板缓存技术??什么样的缓存??是模板编译后的PHP脚本,还是脚本运行后产生的HTML??
    说道不用每次重新渲染,自然是HTML了??
    模板引擎支持静态化,我好像只见到过smarty可以,谈不上常见,不过还是要说,不要把这个工作交给模板引擎去做。
    其实这个类型的缓存还是可以缓存比较多的东西的,例如最新的内容页,在多占用不多的存储空间的情况下,尽量提高一些性能,还是可以接受的。首页,栏目页这些访问量特别大的,还是使用memcache比较好。

    [ 本帖最后由 fhjr999 于 2008-7-4 16:04 编辑 ]
  • fhjr999 (2008-7-04 15:59:40)

    QUOTE:

    原帖由 我要读书网 于 2008-7-4 15:42 发表
    什么叫滥用缓存?
    其他的我不清楚,我只熟悉LZ说的三和四。
    什么时候不该用缓存,什么时候该用,又如何去用,需要根据实际情况来分析。
    例如,你是将缓存写入内存,这样虽然性能很高,但是内存的存储空间极为有限,你不可能往其中写入大量的数据,所以内存缓存的方式就只适合那些数据需求频繁,而又量不大的情况。
    使用缓存要考虑命中率的问题,我不清楚这个概念具体是什么,大概就是所有请求当中,不需要查库,直接通过缓存即可完成的那部分的比例,考虑这个问题,是为了避免占用过多的不必要的存储空间,毕竟存储空间是有限的。例如,十年前的新闻,很少有人去看了,如果也缓存的话,那么他将占用跟最新的新闻同样的存储空间,这就造成了一定的浪费,吃同样多的东西,只干了少少的活计。
    具体如何去用,还是那句话,具体问题,具体分析。
    LZ说的前两点,是我还不知道的,学习了。
  • pylong (2008-7-04 17:03:11)

    中间码缓存应该不属于以上的类别吧
  • fhjr999 (2008-7-04 17:48:08)

    什么中间码缓存,不了解。能简单说下吗??
  • pylong (2008-7-04 19:37:40)

    Alternative PHP Cache(APC)是 PHP 的一个免费公开的优化代码缓存。它用来提供免费,公开并且强健的架构来缓存和优化 PHP 的中间代码。
  • fhjr999 (2008-7-04 20:30:10)

    哦,明白了
    这个确实不属于以上类别。
  • 飘渺晴霜 (2008-7-04 20:56:23)

    缓存技术是不能乱用。
    整个很小的留言本还弄个缓存有必要么。
    记得有个现成的解决方案叫memcache吧(好像是叫这个了)
    也不是使用于任何系统,只要开启memcache就开启系统的2G内存(虽然可以设置)
    记得memcache不只是只能做缓存,还有很多用途(比如有个分布式存储吧)
  • fhjr999 (2008-7-04 21:11:50)

    留言本也用缓存,怎么说呢,也没什么不可以的。虽然没什么效果,但是实现也没什么复杂可言啊,一样。

    而且用缓存来复用数据,也很有用。
  • ShiningRay (2008-7-04 22:19:37)

    QUOTE:

    原帖由 飘渺晴霜 于 2008-7-4 20:56 发表
    缓存技术是不能乱用。
    整个很小的留言本还弄个缓存有必要么。
    记得有个现成的解决方案叫memcache吧(好像是叫这个了)
    也不是使用于任何系统,只要开启memcache就开启系统的2G内存(虽然可以设置)
    记得memcache ...
    其实到处都有缓存啊
    我们的磁盘有缓存,内存有缓存,cpu有缓存,数据库本身就有缓存,Apache也有
    小应用中虽然我们处理php可以不怎么用缓存,但其实其他层次上的别人已经把缓存帮我们做好了
    而且,随着应用规模的增长,缓存就越来越重要

    另,memcached我印象中的2G只是上限,并不是说开了就有2G——我忘记了
  • ginux (2008-7-05 22:41:44)

    牛~学习...
  • shanji (2008-7-07 13:55:43)

    好文 标记一下
  • ybcola (2008-7-08 11:36:46)

    不错