都说smarty + memcache配合用是很好的优化组合,但我不明白为什么用了smarty还要用memcache~
因为smarty不是有页面缓存吗,比如现在有个页面A,我规定它缓存的时间是10分钟,那它只要每十分钟逻辑运算一次就可以了。还要memcache有什么用呢?能给我举个小例子说明smarty和memcache在什么情况下配合使用吗?谢谢各位!

解决方案 »

  1.   

    存的地方不一样,memcache是存到内存中的,smarty是存到硬盘上的,读数据肯定是从内存中读取快,你看哈这2个的原理吧
      

  2.   


    这个我知道啊。。
    你的一色就是说:memcache比smarty静态缓存要快,对吗?
      

  3.   

    既然smarty可以cache了。为什么还要用 memcache ?
      

  4.   

    这个道理很简单:由于运行机制和适用范围的不同,smarty 只被少数初级php程序员使用;而 memcache 被广泛的采纳,并由此衍生出基于内存的数据库系统
      

  5.   

    一个是针对数据,一个针对的被访问的页面,例如最长用的方式将查询出来的条数据存入memcache,而有些页面实时刷新要求不高的那么就smarty的缓存了,作用的范围不同,就像你吃了胡萝卜还要吃西瓜差不多,吃胡萝卜是增加维生素C,吃西瓜是增加维生素D,这个如果还迷糊,你可以先不必纠结,等以后慢慢就知道了
      

  6.   

    嗯,那比如现在有一个页面,要求5分钟一刷新就可以,其中有三条从数据库获取的结果集。
    那我就将这个页面设置成5分钟静态缓存更新一次。比如这种情况,那用不用memcache不是一样的吗?
      

  7.   

    不一样,因为就算你页面缓存了,但是你每次刷新页面后台都要select数据库,只是前台页面没有变化而已,但是如果你用了memcache,例如时间也是5分钟,那么在这5分钟时间里是不会查询数据库的,这样数据库资源就节省了,是不是啊,而smarty的缓存不过是省下了解析模板变量的作用,其实这两者之间的关系并不太大,唯一共同点就是都叫缓存,其他的根本就不能进行对比
      

  8.   

    啊???
    smarty不是有一个判断当前页面是否缓存了的函数吗:is_cached()
    用它判断一下,如果已经有缓存了且没过期,就不用查数据库了啊,直接读静态文件了。
      

  9.   

    两个不同的东西...像kyzy说的。虽然都说是为缓存服务,但是缓存的具体对象和实现方法不太一样。虽然经过各种SM后也能够彼此通融些,但是就有点脱裤子了。简单说smarty缓存最终的结果.memcache缓存中间的部分.当然这样说也比较笼统,但多少你能知道他们不是为了解决相同问题的交集。
      

  10.   

    smarty 的 cache 是基于文件的,可称为 filecache
    访问文件肯定要比访问内存要慢
    所以才有 smarty + memcache 一说
    也就是说可以修改 smarty 将 cache 放到 memcache 中去至于用什么,怎么用,那都是方案问题。与实现技术无关
      

  11.   

    嗯大家说的这两个东西的区别我了解了,谢谢大家!
    但是,我现在最困惑的就是不知道在什么情况下两者可以配合用,就比如我刚才说的那个例子:有一个页面,要求每5分钟刷新一次,其中有三条从数据库获取的结果集。
    我将这个页面用smarty设置静态缓存,且缓存周期是5分钟。
    然后用smarty的is_cached()方法判断是否有缓存且未过期,如果条件成立,就可以直接读取静态文件,反之则重新获取值。那像这种情况,即便用memcache保存这三条结果集,是不是也没什么效果了?
    那什么情况两者能配合着用呢?我只是想知道一个小例子。
    谢谢大家!
      

  12.   

    其实就是缓存存储位置的区别,当你is_cached()判断可以读取缓存之后,smarty就会去读缓存,问题是这个缓存在磁盘上,而磁盘是个比较慢的东西,当访问量很大时,大量的磁盘读取就会堵塞,系统的性能就会大幅下降.而memcache在内存中,比磁盘要快上几个数量级,不太会堵塞.