旗下导航:搜·么
当前位置:网站首页 > PHP教程 > 正文

怎样运用yii2的缓存依靠特征(代码示例)【php教程】

作者:搜搜PHP网发布时间:2019-11-26分类:PHP教程浏览:89


导读:本篇文章给人人带来的内容是关于怎样运用yii2的缓存依靠特征(代码示例),有肯定的参考价值,有须要的朋侪能够参考一下,愿望对你有所协助。缓存是Yii2的壮大特征之一,合理运...
本篇文章给人人带来的内容是关于怎样运用yii2的缓存依靠特征(代码示例),有肯定的参考价值,有须要的朋侪能够参考一下,愿望对你有所协助。

缓存是Yii2的壮大特征之一,合理运用缓存手艺能够有用地减小服务器的接见压力。Yii2最基本的缓存包含数据缓存片断缓存页面缓存HTTP缓存,这部份内容在官方文档中有越发细致的申明,这里不再赘述,若有须要能够参考Yii2官方开辟文档中的缓存部份。

页面缓存

数据缓存与片断缓存都是针对网站中某一部份内容举行的缓存,这类缓存须要在代码部份举行显现声明,修正起来比较贫苦。相对的页面缓存则是针对控制器下要领,对这个要领的视图文件举行页面级别的缓存。因为页面缓存能够运用行动的情势,对控制器举行注入,修正的时刻只要在控制器中修正对应的设置项即可,所以运用页面缓存越发简朴,扩展性更强。

缓存依靠

一般来说,缓存能够加强服务器的机能,但会肯定程度上削弱其交互性。所以须要对缓存举行按期的搜检,清算逾期数据,添补最新数据,以保证内容的实时正确。在这一点上,Yii2的缓存依靠能够有用处置惩罚这个题目。Yii2共有五个内置的缓存类,以下所示:

  • yii\caching\ChainedDependency:假如依靠链上任何一个依靠发生变化,则依靠转变。

  • yii\caching\DbDependency:假如指定 SQL 语句的查询效果发生了变化,则依靠转变。

  • yii\caching\ExpressionDependency:假如指定的 PHP 表达式实行效果发生变化,则依靠转变。

  • yii\caching\FileDependency:假如文件的末了修正时候发生变化,则依靠转变。

  • yii\caching\TagDependency:将缓存的数据项与一个或多个标签相干联。 您能够经由过程挪用 yii\caching\TagDependency::invalidate() 来搜检指定标签的缓存数据项是不是有用。

以数据库依靠DbDependency为例,在控制器IndexController中,声明依靠关联:

<?php
namespace frontend\controllers;
use yii\web\Controller;
class IndexController extends Controller
{
    public function behaviors()
    {
        return [
            [
                'class' => 'yii\filters\PageCache',
                'only' => ['index'],
                'duration' => 60,
                'variations' => [
                    \Yii::$app->language,
                ],
                'dependency' => [
                    'class' => 'yii\caching\DbDependency',
                    'sql' => 'SELECT COUNT(*) FROM post',
                ],
            ],
        ];
    }

    public function actionIndex()
    {
        return $this->render('index');
    }
    
}

如代码所示,在行动要领behaviors()中声明页面设置的驱动类,only对应为一个数组,数组元素是须要缓存的要领对应的视图。duration示意逾期时候,单元为秒。variations对应一个数组,体系会监听这个数组中内容是不是发生了变化,假如发生变化就会革新缓存,反之则不会。dependency对应依靠关联,个中class示意缓存依靠的类,sql示意一个一条查询语句。寄义就是post数据表中纪录的总条数发生变化时,就能够以为新增或许删除类某条数据,须要革新缓存。

链式依靠

上面的例子异常简朴,而现实开辟每每要越发庞杂。有时刻一个页面是不是须要革新由许多要素决议,不是一个关联就能够形貌清晰的。比方说post数据表中既没有删除没有增添,而是更新一条数据,那上面那查询语句就没法处置惩罚类。这时刻,能够用SELECT MAX(*) FROM post检测更新,但内置页面缓存类中没法直接写入这两个查询,这时刻能够用链式依靠的内置类来处置惩罚这个题目。

所谓链式依靠,就是将缓存依靠关联设置到一个链中,一旦链中某个关联不成立,就会革新缓存。
个中yii\caching\ChainedDependency就是缓存依靠的重要完成类。完成代码以下所示:

<?php
namespace frontend\controllers;
use yii\web\Controller;
class IndexController extends Controller
{
    public function behaviors()
    {
        return [
            'pageCache' => [
                'class' => 'yii\filters\PageCache',
                'only' => ['index'],
                'duration' => 24 * 3600 * 365, // 1 year
                'variations' => [
                    \Yii::$app->language,
                    \Yii::$app->id
                ],
                'dependency' => [
                    'class' => 'yii\caching\ChainedDependency',
                    'dependencies' => [
                        new \yii\caching\DbDependency(['sql' => 'SELECT MAX(updated_at) FROM post']),
                        new \yii\caching\DbDependency(['sql' => 'SELECT COUNT(id) FROM post']),
                        new \yii\caching\DbDependency(['sql' => 'SELECT MAX(updated_at) FROM category']),
                        new \yii\caching\DbDependency(['sql' => 'SELECT COUNT(id) FROM category']),
                        new \yii\caching\ExpressionDependency(['expression'=>'\Yii::$app->request->get("id")']);
                        new \yii\caching\FileDependency(['fileName'=>'yanying.txt']);
                    ]
                ],
            ],
        ];
    }

    public function actionIndex()
    {
        return $this->render('index');
    }
    
}

如上所示,dependency中设置类Yii2内置的链式依靠,并在dependencies中定义类缓存依靠关联的“链”。当链上某个关联不成立时,就会革新缓存。另外在全部缓存页面中,假如某一小部份并不须要缓存,能够将其设置为动态内容,这部份能够检察官方文档,不过更引荐看源码,文档引见的比较简朴。

总结

Yii2没有供应HTML页面静态化的内置功用,而是供应了缓存机制。在开辟网站的时刻能够经由过程伪静态+缓存的体式格局优化内容页面,而且采纳内置的缓存依靠和链式依靠处置惩罚内容逾期的题目,经由过程动态内容的设置处置惩罚不须要缓存的部份,比方登录后,首页能够会显现用户名,这部份就能够用动态内容。

以上就是怎样运用yii2的缓存依靠特征(代码示例)的细致内容,更多请关注ki4网别的相干文章!

标签:yii2