周四 2 六 2011
CakePHP中Cache相关的设置
Posted by Jansfer under CakePHP
No Comments
CakePHP的MVC三部分都有一些和Cache相关的设置:
如Model里的cacheQueries属性,如果此属性被设置为true,那么假设我们在一次请求里,重复执行某条SELECT SQL,那么在第一次查询的时候其结果会被缓存(保存到一个数组里),以后重复的查询将会直接得到结果。
Controller里的cacheAction必须满足三个条件才能生效:
1. 在配置文件core.php里设置:Configure::write(‘Cache.check’, true);
2. 在控制器中加载Cache助手:var $helpers = array(‘Cache’); (可以统一放在app_controller.php里)
3. 在控制器中设定$cacheAction属性,如:var $cacheAction = true; 或者 var $cacheAction = "1 hour";
注意:设定$cacheAction的时候,可以使用数组的方式,如:
var $cacheAction = array(
‘view/1′ => 123456,
‘view/2′ => ’1 year’
);
Controller里的persistModel属性比较有趣,如果设置为true,那么在此Controller里用到的Model会被序列化后缓存,据说从一个序列化后的缓存文件里加载数据,然后反序列化后得到说要的对象,比直接用new实例化有效率。
View的模板里可以使用<cake:nocache></cake:nocache>把不需要缓存的部分隔出来。不过并不是所有的变量都可以放在<cake:nocache></cake:nocache>之间,你只要看看实际生成的缓存文件就应该明白,视图缓存文件的原理是生成一个渲染后的php文件,并且缓存文件里面附带有controller的基本信息,在缓存有效的时间内,同样的请求会跳过action的执行,直接使用视图缓存。所以如果你在action里set出来的视图变量就不可能放在cake:nocache里,action并不执行,这样的变量不会生效,如果你一定要实现类似的功能,可以尝试使用requestAction方法。
另外,Model里在执行save和del方法的时候,会通过钩子方法更新缓存文件。
参考链接
==================
View里的renderElement方法已经不推荐使用了,取而代之的是使用element方法,现在似乎流行直接用名词做方法名,似乎说法是这样更DSL,不过我现在还不太习惯这样的方式。
==================
尽量避免在controller中使用requestAction,而应该尽可能的结合view中的element使用requestAction。





















