【YII2學習筆記】20150724-3


一、數據緩存默認配置項 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 "我是被緩存的";
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章