牛骨文教育服务平台(让学习变的简单)
博文笔记

YII2.0框架(三) 缓存机制yiicachingCache

创建时间:2017-05-08 投稿人: 浏览次数:814

摘自:http://www.yiichina.com/doc/guide/2.0/caching-data

一、Yii 缓存机制

1.数据缓存
        $cache = new yiicachingFileCache(); //文件缓存
        $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 yiiwebView*/
$denpendency = [
    "class" => "yiicachingFileDenpendency",
];
$key = "section";
$duration = 5;
$dependency = [ //文件缓存依赖
    "class" => "yiicachingFileDenpendency",
];
$denpendency = [ //数据库查询缓存依赖
    "calss" => "yiicachingDbDenpendency",
    "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" => "yiifiltersPageCache", //页面缓存(服务器端缓存)
                "only" => ["index"],
                "duration" => 60,
                "variations" => Yii::$app->language,
                "dependency" => [
                    "class" => "yiicachingDbDependency",
                    "sql" => "SELECT * FROM tb_user",
                ]
            ],
        ];
    }
4.HTTP缓存(客户端缓存)
    /**
     * @desc 控制器行为
     */
    public function behaviors()
    {
        return [
            [
                "class" => "yiifiltersHttpCache", //http缓存(客户端缓存 )
                "only" => ["input"],
                /*Last-Modified 头使用时间戳标明页面自上次客户端缓存后是否被修改过。*/
                "lastModified" => function($action, $params) {
                    $query = new yiidbQuery();
                    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]);
                }
            ]
        ];
    }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。