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

Yii2片段缓存详解

创建时间:2016-08-11 投稿人: 浏览次数:694

概述

这里只是简单讲一下用法,如果想更详细的了解,去看 官方手册 比较好。

片段缓存指的是缓存页面内容中的某个片段。例如,一个页面显示了逐年销售额的摘要表格, 可以把表格缓存下来,以消除每次请求都要重新生成表格 的耗时。片段缓存是基于数据缓存实现的。

初试牛刀

片段缓存主要在view中使用

// ..../view/site/index.php页面
<?php 
if($this->beginCache("cache")) {
    echo "<p class="cache">这里待会会被缓存</p>";
    $this->endCache();
}
echo "<p class="no_cache">这里不会被缓存</p>";
?>

和数据缓存一样,每个片段缓存都需要一个唯一的名称。

过期时间

// ..../view/site/index.php页面
<?php 
$duration = 15; // 设置过期秒数
if($this->beginCache("cache" , ["duration" => $duration])) {
    echo "<p class="cache">这里待会会被缓存</p>";
    $this->endCache();
}
echo "<p class="no_cache">这里不会被缓存</p>";
?>

依赖关系

和数据缓存一样,片段缓存的内容一样可以设置缓存依赖。例如 一段被缓存的文章,是否重新缓存取决于它是否被修改过。不过具体写法上略有不用。

// ..../view/site/index.php页面
<?php 
$dependency = [ // 这里用文件依赖举例
    "class" => "yiicachingFileDependency",
    "fileName" => "robots.txt"
];
if($this->beginCache("cache" , ["dependency" => $dependency])) {
    echo "<p class="cache">这里待会会被缓存</p>";
    $this->endCache();
}
echo "<p class="no_cache">这里不会被缓存</p>";
?>

当对应依赖文件被修改时,缓存也被取消。

缓存开关

有时你可能只想在特定条件下开启片段缓存。

// ..../view/site/index.php页面
<?php 
$enabled = false; // true[开启]|false[关闭]
if($this->beginCache("cache" , ["enabled" => $enabled])) { // 该片段代码可以说无效
    echo "<p class="cache">这里待会会被缓存123</p>";
    $this->endCache();
}
echo "<p class="no_cache">这里不会被缓存</p>";
?>

缓存嵌套

片段缓存可以被嵌套使用。一个片段缓存可以被另一个包裹。不过要注意的是外层的失效时间应该短于内层,外层的依赖条件应该低于内层,以确保最小的片段,返回的是最新的数据。

// ..../view/site/index.php页面
<?php
if($this->beginCache("cache")) {
    // ...在此生成内容...
    if ($this->beginCache("cache")) {
        // ...在此生成内容...
        $this->endCache();
    }
    // ...在此生成内容...
    $this->endCache();
}
?>

由于用法都一样,这里就不做详细演示。

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。