片段缓存:系统会自动判断是否存在对应的键是否存在缓存,如果存在,在对应的地方插入缓存,否则对内容进行缓存
1.config/main.php 配置
'components'=>array(
'cache'=>array(
'class'=>'system.caching.CFileCache'
),)
选项参数:
duration:缓存时间,默认60S
varyByParam:参数变化,如果GET中有参数 id 设置id值变化时,加载新缓存 varyByParam=>array('id');
dependency:依赖变化。根据数据库值的变化,判断是重新加载缓存:
'dependency'=>array(
'class'=>'system.caching.dependencies.CDbCacheDependency',
'sql'=>'SELECT max(fid) FROM tbl_group'
)
该设定,判断fid最大值是否发生变化。
'requestTypes:请求类型 'requestTypes'=>array('GET')
varyByExpression:指定缓存内容通过自定义的PHP表达式的结果而变化
varyByRoute:指定缓存内容基于请求的路由不同而变化 (controller 和 action)
varyBySession:指定是否缓存内容. 因用户session不同而变化
2.缓存局部变化 $this->renderDynamic(对应控制器中的方法) 注:方法以return 返回值
3.基本模式:
<?php if($this->beginCache($id, array('duration'=>3600))) { ...被缓存的内容... $this->endCache(); }4.嵌套模式:
<?php if($this->beginCache($id1)) { ...外部被缓存内容... if($this->beginCache($id2)) { ...内部被缓存内容... $this->endCache(); } ...外部被缓存内容... $this->endCache(); }
5.例子:
<html>
<head></head>
<body>
<?php
//renderDynamic 调用控制器中的方法,使缓存发生局部变化
if($a=$this->beginCache('h',array('duration'=>3600,'varyByParam'=>array('id')))){
echo "<div id='a1'>".$this->renderDynamic('show')."</div>";
echo "<div id='a2'>".'a1a1a1'."</div>";
?>
<?php
<span style="white-space:pre"> </span>$this->endCache();
}
?>
</body>
</html>