首先先做一下準(zhǔn)備工作及說明:
1、cache在web.php中的配置使用的是默認(rèn)配置FileCache
2喳魏、使用的是yii的basic基礎(chǔ)版
3、在controllers下面新建一個(gè)控制器叫CacheController.php
好了不累贅了怀薛,直接進(jìn)入正題
一截酷、數(shù)據(jù)緩存講解
A、緩存的增刪改查
首先要使用cache乾戏,首先加載使用cache的緩存組件
//yii中的全局使用迂苛,需要加上“\”
$cache = \YII::$app->cache;
添加(往緩存里面寫數(shù)據(jù))
$cache->add('name','lucy');
$cache->add('name','lily');
$cache->add('sex','man');
注意:如果緩存中有相同的key值,后者不會(huì)覆蓋前者的值
需要?jiǎng)h除摸個(gè)緩存使用delete
$cache->delete('name');
讀取緩存使用get即可
echo $cache->get('name');
如果需要清除所有的緩存使用flush
$cache->flush();
設(shè)置緩存使用set鼓择,判斷緩存存不存在使用exists
$cache->add('age',24);
if($cache->exists('age')){
$cache->set('age',25);
}
echo $cache->get('age');
B三幻、設(shè)置緩存失效時(shí)間(直接使用第三個(gè)參數(shù)就可以了,以s為單位)
$cache = \YII::$app->cache;
//設(shè)置緩存時(shí)間為20秒
$cache->add('name','lucy',20);
echo $cache->get('name');
//set方法也可以設(shè)置緩存時(shí)間
$cache->set('name','lily',20);
echo $cache->get('name');
C呐能、緩存依賴
//使用緩存組件
$cache = \YII::$app->cache;
//文件依賴(依賴文件一但修改念搬,則緩存失效)
$denpendency = new \yii\caching\FileDependency(['fileName'=>'hw.txt']);//hw.txt在web目錄下
$cache->add('file_key','hello world!',3000,$denpendency);
var_dump($cache->get('file_key'));
//表達(dá)式依賴(表達(dá)式為獲取請求get參數(shù)name,一但name變化摆出,緩存失效)
$denpendency = new \yii\caching\ExpressionDependency([
'expression' => '\YII::$app->request->get("name")'
]);
$cache->add('expression_key','hello world!',3000,$denpendency);
var_dump($cache->get('expression_key'));
//DB依賴(數(shù)據(jù)庫依賴)【依賴的為數(shù)據(jù)庫查詢條數(shù)朗徊,一但order表中總數(shù)變化,緩存失效】
$dependency = new \yii\caching\DbDependency([
'sql' => 'select count(*) from yii.order'
]);
$cache->add('sql_key','hello world!',3000,$dependency);
var_dump($cache->get('sql_key'));
二偎漫、片段緩存
定義一個(gè)操作如下:
/*指向緩存片段測試頁面*/
public function actionPianduan(){
return $this->renderPartial('pianduan');
}
在views目錄下新建cache目錄爷恳,在cache下面新建pianduan.php文件(內(nèi)容講解都在注釋里面)
<?php
$duration = 20;
//緩存依賴
$dependency = [
'class' => 'yii\caching\FileDependency',
'fileName' => 'hw.txt'
];
//緩存開關(guān)
$enabled = true;
?>
<!--
片段緩存通過beginCache來實(shí)現(xiàn),如果需要設(shè)置緩存時(shí)間的話需要在beginCache里面添加第二個(gè)參數(shù)象踊,是個(gè)數(shù)組
['duration'=>20]
-->
<?php if($this->beginCache('cache_div',['duration'=>$duration,'dependency'=>$dependency,'enabled'=>$enabled])){ ?>
<div id='cache_div'>
<div>這里待會(huì)會(huì)被緩存</div>
<!--
片段緩存時(shí)間問題
如果外存緩存時(shí)間大于里層緩存時(shí)間温亲,那么在外存未過期的情況下,里層即使過期了也沒有機(jī)會(huì)重新刷新
所以杯矩,一般外存的緩存時(shí)間應(yīng)該小于等于里層的緩存時(shí)間栈虚,但也不絕對
-->
<?php if($this->beginCache('cache_inner_div',['duration'=>1])){ ?>
<div id="cache_inner_div">這是一個(gè)嵌套緩存111</div>
<?php
$this->endCache();
}
?>
</div>
<?php
$this->endCache();
}
?>
<!--<div id='no_cache_div'>
<div>這里待不會(huì)被緩存1111</div>
</div>-->
三、頁面緩存
/*測試 behaviors 方法先于其他操作之前執(zhí)行*/
public function behaviors(){
//頁面緩存
return [
[
//頁面緩存類
'class' => 'yii\filters\PageCache',
//緩存時(shí)間
'duration' => 1000,
//設(shè)置需要緩存的操作
'only' => ['pagecache'],
//緩存依賴
'dependency' => [
'class' => 'yii\caching\FileDependency',
'fileName' => 'hw.txt'
]
]
];
}
public function actionPagecache(){
echo 5;
}
public function actionPagecache2(){
echo 6;
}
四史隆、http緩存
public function behaviors(){
return [
[
'class' => 'yii\filters\HttpCache',
'lastModified' => function(){
return filemtime('hw.txt');
//return 1432817570;
},
'etagSeed' => function(){
$fp = fopen('hw.txt','r');
$title = fgets($fp);
fclose($fp);
return $title;
//return 'etagseed4';
}
]
];
}
public function actionHttppage(){
$content = file_get_contents('hw.txt');
return $this->renderPartial('httppage',['news'=>$content]);
}
httppage.php
<div>
<div>
<?=$news ;?>
</div>
</div>