1.数据缓存
缓存依赖:
public function actionTest5()
{
//获取缓存组件
$cache = \Yii::$app->cache;
// 往缓存中写数据
//$cache->add('key1','hello,world');
//读缓存
//echo $cache->get('key1');
//修改缓存
/*$cache->set('key1','edit1');
echo $cache->get('key1');*/
//删除数据
/* $cache->delete('key1');
$data = $cache->get('key');
var_dump($data);*/
//清空所有
//$cache->flush();
/*$cache->add('key1','hello,world'); //只会输出这个
$cache->add('key1','hello,world22');
echo $cache->get('key1');*/
//有效期设置
//$cache->add('key', 'aaa', 15);
// echo $cache->get('key');
//文件依赖,$dependency 所对应的文件被修改,cache失效
/*$dependency = new \yii\caching\FileDependency(['fileName' => 'hw3.txt']);
$cache->add('file_key1', 'abc', 3000, $dependency);
var_dump($cache->get('file_key1'));*/
//表达式依赖
//http://yii.local/web/index.php?r=hello/test5&name=123456 , name 值改变,缓存失效
/* $dependency = new \yii\caching\ExpressionDependency(
['expression' => '\Yii::$app->request->get("name")']
);
$cache->add('expression_key', 'aaaa', 3000, $dependency);
var_dump($cache->get('expression_key'));*/
// DB 依赖 , count 改变,cache 失效
$dependency = new \yii\caching\DbDependency(
['sql' => 'select count(*) from test']
);
//$cache->add('db_key', 'bbb', 3000, $dependency);
var_dump($cache->get('db_key'));
}
2.片段缓存:
<?php
$duration = 20;
//缓存依赖
$dependency = [
'class' => '\yii\caching\FileDependency',
'fileName' => 'hw1.txt'
];
//缓存开关
$enable = true;
// if ($this->beginCache('cache_div')) {
if ($this->beginCache('cache_div', ['duration' => $duration])) {
// if ($this->beginCache('cache_div', ['dependency' => $dependency])) {
// if ($this->beginCache('cache_div', ['enabled' => $enable])) {
?>
<div id="cache_div">
<div>
这里是外层被缓存---aaawe
<?php
if ($this->beginCache('cache_inner_div', ['duration' => 2])) {
?>
<div id="cache_outer_div">
这里是内层,缓存---
注意: 以外层缓存时间为准。也就是说外层缓存时间大于内层,即使内层变化,缓存也不会失效
</div>
<?php
$this->endCache(); }
?>
</div>
</div>
<?php $this->endCache(); } ?>
<br/>
<div id="no_cache_div">
<div>
这里不会被缓存——啊啊啊啊啊
</div>
</div>
3.页面缓存
public function actionTest6()
{
echo '2';
echo '22aaa'; //PageCache 后,改为22,没反应
//return $this->renderPartial('index');
}
//先于控制器中其他方法执行
public function behaviors()
{
echo '1','<br/>';
return [
[
'class' => '\yii\filters\PageCache',
'duration' => 1000,//缓存时间
'only' => ['test6'], //只针对 actionTest6
'dependency' => [
'class' => '\yii\caching\FileDependency',
'fileName' => 'hw.txt'
]
]
];
}
public function actionTest7()
{
echo 'test7123234';
}
4. HTTP 缓存
//先于控制器中其他方法执行
public function behaviors()
{
return [
[
'class' => '\yii\filters\HttpCache',
'lastModified' => function(){
//如果文件修改,mtime 会变化,缓存失效
return filemtime('hw.txt');
//return 1422817567;
},
'etagSeed' => function(){
//标题改变的话,缓存失效
$fp = fopen('hw.txt','r');
$title = fgets($fp);
fclose($fp);
return $title;
//return 'etagsseed2wer';
}
]
];
/*return [
[
'class' => '\yii\filters\PageCache',
'duration' => 1000,//缓存时间
'only' => ['test6'], //只针对 actionTest6
'dependency' => [
'class' => '\yii\caching\FileDependency',
'fileName' => 'hw.txt'
]
]
];*/
}
public function actionTest7()
{
$content = file_get_contents('hw.txt');
return $this->renderPartial('index1', ['new' => $content]);
}