小弟现在用smarty模板。有一个关于缓存的问题,一直解不开疙瘩。比如我现在有20篇文章,10篇文章是一页,共两页。按文章ID倒序排列。象这个应该怎样去缓存呢?我的理解是,每一页做一个缓存。但是:现在,我新发一篇文章,即第 21 篇。那么,这2页的缓存都需要更新。因为发文章之前的第一页的最后一篇,在发文章后,已经跑第2页去了。如果不更新第二页的缓存的话,那么第一页的最后一条文章就没有了。如果文章有几百几千页,那岂不是很不合理呢?所以我感觉这样来缓存实在不合理,所以求合理的列表页缓存思路。谢谢。

解决方案 »

  1.   

    你做个文章模板,生成缓存的也是一个文章的模板。你只要传不能的文章ID 只要内容更新就可以了 有疑问QQ:495244854
      

  2.   

    列表如果做了缓存 在新增文章的时候要清掉原来的缓存文件
    smarty找不到缓存文件 就会重新读取数据库 生成一个新的文件
      

  3.   

    smarty模板的缓存没问题, 在这里你显然是用静态缓存(整页或片断), 要自己设置定时间去更新。要使用这静态必需重新设计你显示文章的布局, 只有改变你自己的应用去适应smarty的缓存, 修改smarty是没必要了, 都已经用到静态, 意味缓存后不可改变。(要么定时刷新)
      

  4.   

    谢谢几位朋友。可能我没说清楚。我的问题主要不是如何去使用smarty。我想问的不是象局部缓存insert block、缓存周期如何更新之类的问题。我的意思是:每发表一篇文章【最新的文章排在最前】,文章列表页都要去更新缓存。并且必须是每一页都要更新。如果我的文章有500页,那这个更新就有点动作太大了。但如果只更新第一页的缓存,那么,发文章之前的第一页的最后一篇文章,就不见了。因为如果没有缓存的话,这篇文章会排到第二页的第一条去。但因为第二页有缓存,所以就不显示这一篇文章。即,文章列表页 的缓存,如何去设计呢?
      

  5.   

    也就是说,用smarty的缓存,怎样实现如果有缓存就不需要查询数据库直接显示,而我发一篇文章后,缓存就更新,并且不会出现哪一条不见了的情况。求实现这个效果的思路。
    smarty的基本使用我已经会搞了,象建立缓存清除缓存缓存周期判断是否有缓存等等。
      

  6.   


    smarty的缓存应该都是这样用的吧
    $tpl->caching=true;
    $tpl->cache_lifetime=3600;
    然后可以对局部不缓存insert block等。必需重新设计你显示文章的布局
    假如现在网站啥也没有,就只有一个页面list.php,就只是输出文章列表,要求用缓存,并且满足我上面一贴的条件。我的意思就是这样的。