您的位置:首页 > 编程语言 > PHP开发

YII2.0框架(三) 缓存机制yii\caching\Cache

2017-05-08 16:59 337 查看
摘自:http://www.yiichina.com/doc/guide/2.0/caching-data


一、Yii 缓存机制

1.数据缓存

        $cache = new \yii\caching\FileCache(); //文件缓存

        $key = 'name';

        $value = 'value11111111111';

        $duration = 100;

        $data = [

            ['name' => 'name'],

            ['value' => 'value']

        ];

        $exists = $cache->exists($key); //检查指定的键是否存在缓存中

        $buildKey = $cache->buildKey($key); //检查指定的键是否存在缓存中,超过32位使用MD5加密

        $get = $cache->get($key); //从缓存中取得指定键的值

        $set = $cache->set($key, $value, $duration);
//将指定键的值存储在缓存中

        $multiSet = $cache->multiSet($data, $duration); //将多条数据存在缓存中

        $add = $cache->add($key, $value, $duration);
//将多条数据存在缓存中

        $delete = $cache->delete($key); //删除指定键值的数据

        $flush = $cache->flush($key); //从缓存中删除所有数据    
2.片段缓存

<?php

/*@var $this yii\web\View*/

$denpendency = [

    'class' => 'yii\caching\FileDenpendency',

];

$key = 'section';

$duration = 5;

$dependency = [ //文件缓存依赖

    'class' => 'yii\caching\FileDenpendency',

];

$denpendency = [ //数据库查询缓存依赖

    'calss' => 'yii\caching\DbDenpendency',

    'sql' => 'SELECT * FROM tb_admin',

];

if ($this->beginCache($key, ['duration' => $duration], ['dependency' => $dependency],

['variations' => \Yii::$app->language])) {

    

    echo '该页面数据缓存';

    $this->endCache();

}

?>
3.页面缓存(服务器端缓存)

    /**

     * @desc 控制器行为

     */

    public function behaviors()

    {

        return [

            [

                'class' => 'yii\filters\PageCache', //页面缓存(服务器端缓存)

                'only' => ['index'],

                'duration' => 60,

                'variations' => Yii::$app->language,

                'dependency' => [

                    'class' => 'yii\caching\DbDependency',

                    'sql' => 'SELECT * FROM tb_user',

                ]

            ],

        ];

    }
4.HTTP缓存(客户端缓存)

    /**

     * @desc 控制器行为

     */

    public function behaviors()

    {

        return [

            [

                'class' => 'yii\filters\HttpCache', //http缓存(客户端缓存 )

                'only' => ['input'],

                /*Last-Modified 头使用时间戳标明页面自上次客户端缓存后是否被修改过。*/

                'lastModified' => function($action, $params) {

                    $query = new \yii\db\Query();

                    return strtotime($query->from('tb_admin')->max('created'));
//当数据中最大时间改变,缓存失效

                },

                /*“Entity Tag”(实体标签,简称 ETag)使用一个哈希值表示页面内容。如果页面 被修改过,哈希值也会随之改变。通过对比客户端的哈希值和服务器端生成的哈 希值,浏览器就能判断页面是否被修改过,进而决定是否应该重新传输内容*/

                'etagSeed' => function($action, $params) {

                    $post = $this->findModel(\Yii::$app->request->get('id'));

                    return serialize([$post->title, $post->content]);

                }

            ]

        ];

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐