请教SMARTY 发帖后clearCache 文章列表的逻辑

sky94132003 2014-08-12 02:01:13
文章列表的samrty代码如下

$smarty -> setCacheDir(ROOT_PATH."/cache/forum");
$smarty -> display("$module/list.html",$_SERVER["REQUEST_URI"]);

ROOT_PATH = 我的根目录
$module = 我PHP开头会自定当前是什么模组,自己找模板中的子目录

因为文章多, 架构多, 不同的模组也多...所以想到把cache 和 template都做成子目录
template子目录为了方便找文件
cache子目录...是因为怕同一个目录中文件过多,分子目录也会以便我按照不同的模组清理缓存

我在display加入了一句:$_SERVER["REQUEST_URI"]

因为是分页,还有可能是其他的变量

我页面上暂时最多有可能有3个参数 list.php?fid=1&type=20&page=3

fid=栏目 (必定有)
type=主题分类 (看情况, 有些页面有, 有些页面没有)
page=当前页面 (必定有)

因为参数不同,所以也可能生成不同的文件

使用smarty主要就是为了减轻数据库压力



问题一.

我在一个名为post.php的页面发表文章

发表完成时会有一些基本的数据,好比$fid = 1 (栏目id),我就想用此栏目id,把当然栏目的cache 清理

就是这个: list.php?fid=1&type=20&page=3

有办法有所有fid = 1有关的都清理吗?

就是只要fid = 1 ,不管其他参数type=100还是type=5,还有所有page=xxx的都更新吗?



问题二.
SMARTY官方 和网上搜到的简介....
清空CACHE只有这一句
clear_cache('index.tpl',cache_id);//清除指定id的缓存


并不能清空指定的目录
因为上面也解释过我是有用模板子目录的



问题三.
经验一问

如果我想更实时一点,网站又蛮多人上的,我把解决问题一和问题二,反而把samrty cache时间设成10秒

那如果是一个长期有500~2000人的网站,用户常常留言/交流的网站

我设成10秒左右的缓存会不会比起不缓存更大压力???

我这种情况大家会把流量写得更...每次回帖/发文章都清空缓存,还是直接放弃缓存?



不好意思,已经没什么分献给各位大哥了

诚心求学
...全文
156 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
sky94132003 2014-08-13
  • 打赏
  • 举报
回复
引用 9 楼 xuzuning 的回复:
这与你的具体应用是有关系的 论坛总是要把新帖和有新回复的放在前面,以引起注意 所以缓存就没有意义了
谢谢 明白了
xuzuning 2014-08-13
  • 打赏
  • 举报
回复
列表页缓存应在相关文章添加时删除 列表页缓存可在再次访问时自动生成,也可在文章发布后主动生成 如果是采用后者,那么列表页可直接为静态,或缓存永不过期。以减少检查缓存是否过期的开销
xuzuning 2014-08-13
  • 打赏
  • 举报
回复
这与你的具体应用是有关系的 论坛总是要把新帖和有新回复的放在前面,以引起注意 所以缓存就没有意义了
sky94132003 2014-08-13
  • 打赏
  • 举报
回复
引用 7 楼 xuzuning 的回复:
你的列表是论坛的帖子列表吗?这一点你并没有说明噢 如果是,在不需要缓存 如果是文章列表,可以缓存。因为回覆不影响列表顺序。至多影响到“最新动态”列表 主动生成列表页或清除缓存时,都是以导航条跨距为限的 因为访问超出导航条跨距的页面时,缓存早就已经过期了 如果两三分钟就用新文章上线,就表示这个网站活动频繁。所以缓存就是非常必要的了
其实系统和论坛几乎就是一样了 因为其他功能关系到会员权和积分,所以没用别人的,只能自己做个简单的 是自己用PHP+SMARTY做的 如果是论坛列表就不用缓存了? 只要回覆会影响到排名...就不建议做缓存了是吧? 顺道一问,不知大家了不了解,DZ,PW他们是不是只有首页做了cache,列表文章都没有cache的?
sky94132003 2014-08-13
  • 打赏
  • 举报
回复
自推一把,求建议
xuzuning 2014-08-13
  • 打赏
  • 举报
回复
你的列表是论坛的帖子列表吗?这一点你并没有说明噢 如果是,在不需要缓存 如果是文章列表,可以缓存。因为回覆不影响列表顺序。至多影响到“最新动态”列表 主动生成列表页或清除缓存时,都是以导航条跨距为限的 因为访问超出导航条跨距的页面时,缓存早就已经过期了 如果两三分钟就用新文章上线,就表示这个网站活动频繁。所以缓存就是非常必要的了
sky94132003 2014-08-13
  • 打赏
  • 举报
回复
引用 5 楼 xuzuning 的回复:
列表页缓存应在相关文章添加时删除 列表页缓存可在再次访问时自动生成,也可在文章发布后主动生成 如果是采用后者,那么列表页可直接为静态,或缓存永不过期。以减少检查缓存是否过期的开销
谢谢你 但如果大约每分钟都有2~3个回覆 列表是以最新回覆排序 如果列表已有30~40分 每次排序不是也要删除再生成30~40页页吗? 你建议使用CACHE吗?
傲雪星枫 2014-08-12
  • 打赏
  • 举报
回复
比較奇怪,既然你比較注重的是實時,那就不應用緩存了。 即使要用緩存,那都需要每執行完一個事件後,對應的緩存就必須重新生成。才能達到實時的效果。 對於文章列表,如果你一天內,每分鐘都會增加或修改新文章的。那緩存的作用就不大。 如果是一天內,可能新增的文章與修改數不多。那可以在後臺做一個功能。調用則清一次列表的緩存。 其實保存緩存的路徑,目錄規則你都知道,完全可以自己寫一個清cache的類實現啊,為甚麼要糾結用smarty自帶的呢? smarty是按cacheid做判斷的,不適合你的情況。
猪崽儿0o0 2014-08-12
  • 打赏
  • 举报
回复
一直变化的不建议使用缓存,也可以采用像QQ空间那样用ajax来加载。这个只是我的愚见。
sky94132003 2014-08-12
  • 打赏
  • 举报
回复
引用 2 楼 fdipzone 的回复:
比较奇怪,既然你比较注重的是实时,那就不应用缓存了。 即使要用缓存,那都需要每执行完一个事件后,对应的缓存就必须重新生成。才能达到实时的效果。 对于文章列表,如果你一天内,每分钟都会增加或修改新文章的。那缓存的作用就不大。 如果是一天内,可能新增的文章与修改数不多。那可以在后台做一个功能。调用则清一次列表的缓存。 其实保存缓存的路径,目录规则你都知道,完全可以自己写一个清cache的类实现啊,为甚么要纠结用smarty自带的呢? smarty是按cacheid做判断的,不适合你的情况。
所以我在想 我的列表像论坛一样,按照最新回覆排列 如果每分钟...甚至每10~20秒都有人回覆.....而列表又有30~40页的话 每10~20秒都要清理一次CACHE 不管是回覆文章后的满足条件而清理还是自动设定CACHE有效时间为15秒 要不停的清理缓存文件...然后而生成缓存....是否都比起不缓存更加重主机负担???

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧