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

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

Feb 27, 2019 am 09:31 AM
yii2

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;);
    }
    
}
Copy after login

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;);
    }
    
}
Copy after login

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 of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Apr 05, 2025 am 12:04 AM

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

How does session hijacking work and how can you mitigate it in PHP? How does session hijacking work and how can you mitigate it in PHP? Apr 06, 2025 am 12:02 AM

Session hijacking can be achieved through the following steps: 1. Obtain the session ID, 2. Use the session ID, 3. Keep the session active. The methods to prevent session hijacking in PHP include: 1. Use the session_regenerate_id() function to regenerate the session ID, 2. Store session data through the database, 3. Ensure that all session data is transmitted through HTTPS.

Describe the SOLID principles and how they apply to PHP development. Describe the SOLID principles and how they apply to PHP development. Apr 03, 2025 am 12:04 AM

The application of SOLID principle in PHP development includes: 1. Single responsibility principle (SRP): Each class is responsible for only one function. 2. Open and close principle (OCP): Changes are achieved through extension rather than modification. 3. Lisch's Substitution Principle (LSP): Subclasses can replace base classes without affecting program accuracy. 4. Interface isolation principle (ISP): Use fine-grained interfaces to avoid dependencies and unused methods. 5. Dependency inversion principle (DIP): High and low-level modules rely on abstraction and are implemented through dependency injection.

How to debug CLI mode in PHPStorm? How to debug CLI mode in PHPStorm? Apr 01, 2025 pm 02:57 PM

How to debug CLI mode in PHPStorm? When developing with PHPStorm, sometimes we need to debug PHP in command line interface (CLI) mode...

Framework Security Features: Protecting against vulnerabilities. Framework Security Features: Protecting against vulnerabilities. Mar 28, 2025 pm 05:11 PM

Article discusses essential security features in frameworks to protect against vulnerabilities, including input validation, authentication, and regular updates.

How to automatically set permissions of unixsocket after system restart? How to automatically set permissions of unixsocket after system restart? Mar 31, 2025 pm 11:54 PM

How to automatically set the permissions of unixsocket after the system restarts. Every time the system restarts, we need to execute the following command to modify the permissions of unixsocket: sudo...

Explain late static binding in PHP (static::). Explain late static binding in PHP (static::). Apr 03, 2025 am 12:04 AM

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

See all articles