一、數據緩存默認配置項 yii/config/web.php
$config = [
'id' => 'basic',
'basePath' => dirname(__DIR__),
'bootstrap' => ['log'],
'components' => [
'request' => [
// !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
'cookieValidationKey' => 'eddycjy19950728',
],
'cache' => [
'class' => 'yii\caching\FileCache', //默認爲文件儲存
],
二、數據緩存組件引入
$cache = \YII:$app->cache;
三、操作數據緩存
yii\caching\Cache::get():通過一個指定的鍵(key)從緩存中取回一項數據。如果該項數據不存在於緩存中或者已經過期/失效,則返回值 false。
yii\caching\Cache::set():將一項數據指定一個鍵,存放到緩存中。
yii\caching\Cache::add():如果緩存中未找到該鍵,則將指定數據存放到緩存中。
yii\caching\Cache::mget():通過指定的多個鍵從緩存中取回多項數據。
yii\caching\Cache::mset():將多項數據存儲到緩存中,每項數據對應一個鍵。
yii\caching\Cache::madd():將多項數據存儲到緩存中,每項數據對應一個鍵。如果某個鍵已經存在於緩存中,則該項數據會被跳過。
yii\caching\Cache::exists():返回一個值,指明某個鍵是否存在於緩存中。
yii\caching\Cache::delete():通過一個鍵,刪除緩存中對應的值。
yii\caching\Cache::flush():刪除緩存中的所有數據。
//往緩存當中寫數據
$cache->add('鍵值','數值',有效期); //當緩存中已存在相同的鍵值時,後者不會疊加前者,值還是後者
//修改緩存中數據
$cache->set('鍵值','數值',有效期);
//刪除緩存數據
$cache->delete('鍵值');
//清空緩存數據
$cache->flush();
四、緩存依賴
1.文件依賴
$dependency = new \yii\caching\FileDependency(['fileName' => '文件名字']);
$cache->add('鍵值','數據',有效期,$dependency);
$cache->set('鍵值', '數據', 30, $dependency);
$data = $cache->get('鍵值');
2.表達式依賴
$dependency = new \yii\caching\ExpressionDependency(
['expression'=>'\YII::$app->request->get("name")]'
);
3.DB依賴
$dependency = new \yii\caching\DbDependency(
['sql' => SQL語句]
);
4.鏈式依賴
5.組依賴
下面是可用的緩存依賴的概況:
yii\caching\ChainedDependency:如果依賴鏈上任何一個依賴產生變化,則依賴改變。
yii\caching\DbDependency:如果指定 SQL 語句的查詢結果發生了變化,則依賴改變。
yii\caching\ExpressionDependency:如果指定的 PHP 表達式執行結果發生變化,則依賴改變。
yii\caching\FileDependency:如果文件的最後修改時間發生變化,則依賴改變。
yii\caching\GroupDependency:將一項緩存數據標記到一個組名,你可以通過調用 yii\caching\GroupDependency::invalidate() 一次性將相同組名的緩存全部置爲失效狀態。
五、查詢緩存
$db = new yii\db\Connection();
查詢緩存有兩個通過 yii\db\Connection 設置的配置項:
yii\db\Connection::queryCacheDuration: 查詢結果在緩存中的有效期,以秒錶示。如果在調用 yii\db\Connection::beginCache() 時傳遞了一個顯式的時值參數,則配置中的有效期時值會被覆蓋。
yii\db\Connection::queryCache: 緩存應用組件的 ID。默認爲 'cache'。只有在設置了一個有效的緩存應用組件時,查詢緩存纔會有效。
六、片段緩存
存在該緩存則返回FALSE進行讀取,否則不存在則TRUE進行緩存
if ($this->beginCache('鍵值',有效期)) {
//有效期默認爲0,則爲永不過期
// ... 內容 ...
$this->endCache();
}
/*
* 設置緩存配置
*/
$dependency = [
'class' => 'yii\caching\DbDependency', //使用的緩存依賴類型
'sql' => 'SELECT MAX(updated_at) FROM post', //所緩存的sql語句
];
if ($this->beginCache($id, ['dependency' => $dependency])) {
// ... 在此生成內容 ...
$this->endCache();
}
//緩存開關
$enable = true;
if ($this->beginCache($id, ['enable' => $enable])) {
// ... 在此生成內容 ...
$this->endCache();
}
如果緩存中存在該內容,yii\base\View::beginCache() 方法會將已緩存內容輸出。
否則,若不存在該緩存,則生成邏輯,生成的內容將存儲在緩存中。
*片段緩存嵌套,需要注意內外的有效期導致的問題。
七、頁面緩存
public function behaviors(){
return [
[
'class' => 'yii\filters\PageCache', //頁面緩存
'duration' =>1000, //有效期
'only' =>['index','test'], //僅在該控制器(index,test)執行頁面緩存
'dependency' =>[
'class' =>'yii\caching\FileDependency', //使用的緩存依賴方式
'fileName' =>'hw.txt' //緩存的文件(注 當文件修改後,緩存也同時失效)
]
]
];
}
public function actionIndex(){
echo "我是被緩存的";
}