Home  >  Article  >  Backend Development  >  How to use the cache dependency feature of yii2 (code example)

How to use the cache dependency feature of yii2 (code example)

不言
不言forward
2019-02-27 09:31:252032browse

The content of this article is about how to use the cache dependency feature (code example) of yii2. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.

Caching is one of the powerful features of Yii2. Proper use of caching technology can effectively reduce the access pressure on the server. The most basic cache of Yii2 includes Data Cache, Fragment Cache, Page Cache and HTTP Cache. This part of the content is in the official documentation. For a more detailed description, I won’t go into details here. If necessary, you can refer to the caching section in the Yii2 official development documentation.

Page Cache

Data cache and fragment cache are caches for a certain part of the website. This cache needs to be explicitly declared in the code part and modified. kind of hard. The relative page cache is for the method under the controller, and the view file of this method is cached at the page level. Since the page cache can be injected into the controller in the form of behavior, you only need to modify the corresponding configuration items in the controller when making changes, so using the page cache is simpler and more scalable.

Cache dependency

Generally speaking, caching can enhance the performance of the server, but will weaken its interactivity to a certain extent. Therefore, it is necessary to regularly check the cache, clean up expired data, and fill in the latest data to ensure that the content is timely and accurate. At this point, Yii2's cache dependency can effectively solve this problem. Yii2 has five built-in caching classes, as follows:

  • yii\caching\ChainedDependency: If any dependency in the dependency chain changes, the dependency changes.

  • yii\caching\DbDependency: If the query result of the specified SQL statement changes, the dependency changes.

  • yii\caching\ExpressionDependency: If the execution result of the specified PHP expression changes, the dependency changes.

  • yii\caching\FileDependency: If the last modification time of the file changes, the dependency changes.

  • yii\caching\TagDependency: Associate cached data items with one or more tags. You can check whether a cached data item for a specified tag is valid by calling yii\caching\TagDependency::invalidate().

Take the database dependency DbDependency as an example. In the controller IndexController, declare the dependency:

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

    public function actionIndex()
    {
        return $this->render(&#39;index&#39;);
    }
    
}

As shown in the code, in the behavior method behaviors() declares the driver class of the page configuration, only corresponds to an array, and the array elements are the views corresponding to the methods that need to be cached. duration represents the expiration time in seconds. variations corresponds to an array, and the system will monitor whether the content in this array has changed. If it changes, the cache will be refreshed, and vice versa. dependency corresponds to a dependency relationship, where class represents the class that the cache depends on, and sql represents a query statement. The meaning is that when the total number of records in the post data table changes, it can be considered that a certain piece of data is added or deleted and the cache needs to be refreshed.

Chain dependency

The above example is very simple, but actual development is often more complicated. Sometimes whether a page needs to be refreshed is determined by many factors, which cannot be described clearly by just one relationship. For example, if there is neither deletion nor addition in the post data table, but an update of data, then the above query statement cannot process the class. At this time, you can use SELECT MAX(*) FROM post to detect updates, but these two queries cannot be written directly into the built-in page cache class. At this time, you can use the built-in class of chain dependency to solve this problem. .

The so-called chain dependency is to configure the cache dependency relationship into a chain. Once a relationship in the chain is not established, the cache will be refreshed.
Where yii\caching\ChainedDependency is the main implementation class of cache dependency. The implementation code is as follows:

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

    public function actionIndex()
    {
        return $this->render(&#39;index&#39;);
    }
    
}

As shown above, configure the built-in chain dependency of class Yii2 in dependency, and define the "chain" of class cache dependencies in dependencies. When a certain relationship on the chain does not hold, the cache will be refreshed. In addition, if a small part of the entire cached page does not need to be cached, it can be set as dynamic content. You can check the official documentation for this part, but it is more recommended to look at the source code. The documentation is relatively simple.

Summary

Yii2 does not provide a built-in function for static HTML pages, but provides a caching mechanism. When developing a website, you can optimize the content page through pseudostatic caching, and use built-in cache dependencies and chain dependencies to solve the problem of content expiration, and deal with the parts that do not need to be cached through the setting of dynamic content. For example, after logging in, the user name can be displayed on the homepage, and dynamic content can be used in this part.

The above is the detailed content of How to use the cache dependency feature of yii2 (code example). For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:cnblogs.com. If there is any infringement, please contact admin@php.cn delete