yii2之cache講解

首先先做一下準(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>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末魂务,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌粘姜,老刑警劉巖蚣驼,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異相艇,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)纯陨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門坛芽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人翼抠,你說我怎么就攤上這事咙轩。” “怎么了阴颖?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵活喊,是天一觀的道長。 經(jīng)常有香客問我量愧,道長钾菊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任偎肃,我火速辦了婚禮煞烫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘累颂。我一直安慰自己滞详,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布紊馏。 她就那樣靜靜地躺著料饥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪朱监。 梳的紋絲不亂的頭發(fā)上岸啡,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天,我揣著相機(jī)與錄音赫编,去河邊找鬼凰狞。 笑死,一個(gè)胖子當(dāng)著我的面吹牛沛慢,可吹牛的內(nèi)容都是我干的赡若。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼团甲,長吁一口氣:“原來是場噩夢啊……” “哼逾冬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤身腻,失蹤者是張志新(化名)和其女友劉穎产还,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嘀趟,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡脐区,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了她按。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片牛隅。...
    茶點(diǎn)故事閱讀 40,117評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖酌泰,靈堂內(nèi)的尸體忽然破棺而出媒佣,到底是詐尸還是另有隱情,我是刑警寧澤陵刹,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布默伍,位于F島的核電站,受9級特大地震影響衰琐,放射性物質(zhì)發(fā)生泄漏也糊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一羡宙、第九天 我趴在偏房一處隱蔽的房頂上張望显设。 院中可真熱鬧,春花似錦辛辨、人聲如沸捕捂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽指攒。三九已至,卻和暖如春僻焚,著一層夾襖步出監(jiān)牢的瞬間允悦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工虑啤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留隙弛,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓狞山,卻偏偏與公主長得像全闷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子萍启,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,182評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理总珠,服務(wù)發(fā)現(xiàn)屏鳍,斷路器,智...
    卡卡羅2017閱讀 134,667評論 18 139
  • 上一篇《WEB請求處理一:瀏覽器請求發(fā)起處理》局服,我們講述了瀏覽器端請求發(fā)起過程钓瞭,通過DNS域名解析服務(wù)器IP,并建...
    七寸知架構(gòu)閱讀 81,012評論 21 356
  • 讀中學(xué)的時(shí)候一到周末就會(huì)跑出校園老遠(yuǎn)去買雞腿淫奔,仿佛每個(gè)周末都是為了那兩個(gè)翅中而存在的~如今山涡,大學(xué)畢業(yè)也好多年,再也...
    香糖蛋閱讀 756評論 0 4