首页 | 新闻 | 交流 | 问吧 | 文档 | 手册 | 下载 | 博客

收藏此问题 发表新评论

【讨论】怎样合理运用缓存?!高手进!附上我的ZF DEMO网站。

http://lingping.info/zf

我练习zf做的一个网站.参照了一个例子改的~~

首先是对agent(销售人员)的管理

包括查询,增删改。我用的smarty的缓存caching=1
然后,

$this->_cache_id = str_replace("/","|",$this->_request->getPathInfo());
$this->view->setCacheId($this->_cache_id);


$flag_cached = $this->view->getEngine()->is_cached("index/index.html",$this->_cache_id);
判断是否使用缓存


每次有新增或者改动或者删除的动作,就重写所有的缓存
$this->view->getEngine()->clear_cache("index/index.html","|");
$this->view->getEngine()->clear_cache(null,"|agent|index|index");   
$this->view->getEngine()->clear_cache("index/index.html","|agent|index");

但是,如果这样,那就经常删除所有的缓存,比如我改了 agent甲,就把所有销售人员的缓存都删了。
如果增删改多了,反而是加重系统负担了,没有起到缓存的作用?!

怎么样的思路可以让我改动了 甲,只更新和甲相关的所有页面呢?!(包括查询的结果哦)

[ 本帖最后由 伶俜 于 2007-8-27 06:38 编辑 ]
昵称: 伶俜  时间: 2007-08-27 06:36:00
up
昵称: 伶俜  时间: 2007-08-27 15:50:00
up!!!
昵称: 伶俜  时间: 2007-08-27 23:58:00
对cache进行分组 你再到官方网站看看 你就差一点点就可以实现了 给点提示: 数组   ;P
昵称: edwardhey  时间: 2007-08-28 08:08:00
引用:
原帖由 edwardhey 于 2007-8-28 08:08 发表
对cache进行分组 你再到官方网站看看 你就差一点点就可以实现了 给点提示: 数组   ;P
i can't understand "数组", how ?

did you talk about this ?
- If you specify a      $compile_id      such as clear_cache(null,'a|b','foo') it is treated as      an appended cache group '/a/b/c/foo/'.

but in my cache_id, i haven't the agent id ? i have just the page id $this->_request->getPathInfo()

thanks.

(i can't speak chinese here, sorry for my poor english)
昵称: 伶俜  时间: 2007-08-28 16:15:00
hay!!!
昵称: 伶俜  时间: 2007-08-29 15:40:00
i didn't find it
昵称: 伶俜  时间: 2007-08-30 18:31:00
我们使用缓存的目的主要有如下几点:
1、减少数据库查询次数,降低数据库负载。
2、缩短php执行路径,降低web前端负载。
3、减少webserver的请求数量, 降低web前端负载。

其中 第一项 比较接近底层, 主要做细粒度数据缓存, 比如缓存一个数据对象, 一行记录等。 只有当对象中的属性或记录中的字段值发生变化后使缓存失效。  memcached很适合做这个工作。

第二项: 主要将业务逻辑复杂的区域或模块以某种静态形式缓存, 比如页面中的某个区域,某个具体的action->render后的内容 等。 Smarty 缓存是个不错的选择,当然还有一些其他方案比如 CacaLite等。

以上两类缓存策略的实现 必须有一个统一的 cacheKey 管理策略来辅助。  这样才能达到对缓存的精细化控制。

第三项:目前大型网站都是用 squid来缓存不长更新的页面,或者说数据的更新对于用户来说不是很敏感的页面。 比如首页、列表页等。 后台的数据更新对于前台首页来讲晚一时半会儿无所谓。 这种地方就很适合squid , 他是基于url的一种按时间过期的反向代理缓存。不夸张的说 上千万pv的网站 70%靠 squid, 30% 靠webserver。

这三类缓存 楼主想明白后 基本上够用了。:)
昵称: dreamriver  时间: 2007-09-23 19:20:00