Maison  >  Article  >  développement back-end  >  Comment utiliser la fonctionnalité de dépendance de cache de yii2 (exemple de code)

Comment utiliser la fonctionnalité de dépendance de cache de yii2 (exemple de code)

不言
不言avant
2019-02-27 09:31:252101parcourir

Le contenu de cet article explique comment utiliser la fonctionnalité de dépendance de cache (exemple de code) de yii2. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

La mise en cache est l'une des fonctionnalités puissantes de Yii2. Une utilisation appropriée de la technologie de mise en cache peut réduire efficacement la pression d'accès sur le serveur. Le cache le plus basique de Yii2 comprend le le cache de données, le le cache de fragments, le le cache de pages et le le cache HTTP. la documentation officielle. Pour une description plus détaillée, je n'entrerai pas dans les détails ici. Si nécessaire, vous pouvez vous référer à la section mise en cache dans la documentation officielle de développement de Yii2.

Cache de page

Le cache de données et le cache de fragments sont des caches pour une certaine partie du site Web. Ce cache doit être explicitement déclaré dans la partie code et modifié. gênant. Le cache de page relatif concerne la méthode sous le contrôleur et le fichier de vue de cette méthode est mis en cache au niveau de la page. Étant donné que le cache de pages peut être injecté dans le contrôleur sous forme de comportement, il vous suffit de modifier les éléments de configuration correspondants dans le contrôleur lors des modifications. L'utilisation du cache de pages est donc plus simple et plus évolutive.

Dépendance du cache

De manière générale, la mise en cache peut améliorer les performances du serveur, mais affaiblira dans une certaine mesure son interactivité. Par conséquent, il est nécessaire de vérifier régulièrement le cache, de nettoyer les données expirées et de remplir les dernières données pour garantir que le contenu est opportun et précis. À ce stade, la dépendance au cache de Yii2 peut résoudre efficacement ce problème. Yii2 dispose de cinq classes de mise en cache intégrées, comme suit :

  • yiicachingChainedDependency : si une dépendance dans la chaîne de dépendances change, la dépendance change.

  • yiicachingDbDependency : si le résultat de la requête de l'instruction SQL spécifiée change, la dépendance change.

  • yiicachingExpressionDependency : Si le résultat de l'exécution de l'expression PHP spécifiée change, la dépendance change.

  • yiicachingFileDependency : Si l'heure de la dernière modification du fichier change, la dépendance change.

  • yiicachingTagDependency : associe un élément de données mis en cache à une ou plusieurs balises. Vous pouvez vérifier si un élément de données mis en cache pour une balise spécifiée est valide en appelant yiicachingTagDependency::invalidate().

Prenons la dépendance de base de données DbDependency comme exemple. Dans le contrôleur IndexController, déclarez la dépendance :

<?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;);
    }
    
}

Comme indiqué dans le code, dans le comportement. La méthode behaviors() déclare la classe de pilote de configuration de la page, only correspond à un tableau et les éléments du tableau sont les vues correspondant aux méthodes qui doivent être mises en cache. la durée représente le délai d'expiration en secondes. variations correspond à un tableau, et le système surveillera si le contenu de ce tableau a changé. S'il change, le cache sera actualisé, et vice versa. dependency correspond à une relation de dépendance, où class représente la classe dont dépend le cache et sql représente une instruction de requête. Cela signifie que lorsque le nombre total d'enregistrements dans la table de données de publication change, on peut considérer qu'une certaine donnée est ajoutée ou supprimée et que le cache doit être actualisé.

Dépendance de la chaîne

L'exemple ci-dessus est très simple, mais le développement réel est souvent plus compliqué. Parfois, la nécessité ou non d’actualiser une page est déterminée par de nombreux facteurs, qui ne peuvent être décrits clairement par une seule relation. Par exemple, s'il n'y a ni suppression ni ajout dans la table de données de publication, mais une mise à jour des données, alors l'instruction de requête ci-dessus ne peut pas traiter la classe. Pour le moment, vous pouvez utiliser SELECT MAX(*) FROM post pour détecter les mises à jour, mais la classe de cache de page intégrée ne peut pas écrire directement ces deux requêtes. Pour le moment, vous pouvez utiliser la classe intégrée de dépendance en chaîne pour résoudre ce problème.

La soi-disant dépendance de chaîne consiste à configurer la relation de dépendance du cache dans une chaîne. Une fois qu'une certaine relation dans la chaîne n'est pas établie, le cache sera actualisé.
yiicachingChainedDependency est la classe d'implémentation principale des dépendances de cache. Le code d'implémentation est le suivant :

<?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;);
    }
    
}

Comme indiqué ci-dessus, la dépendance de chaîne intégrée de la classe Yii2 est configurée dans la dépendance, et la "chaîne" des dépendances du cache de classe est définie dans les dépendances. Lorsqu'une certaine relation sur la chaîne ne tient pas, le cache sera actualisé. De plus, si une petite partie de la page entière mise en cache n'a pas besoin d'être mise en cache, elle peut être définie comme contenu dynamique. Vous pouvez consulter la documentation officielle pour cette partie, mais il est plus recommandé de consulter le code source. la documentation est relativement simple.

Résumé

Yii2 ne fournit pas de fonction intégrée pour les pages HTML statiques, mais fournit un mécanisme de mise en cache. Lors du développement d'un site Web, vous pouvez optimiser la page de contenu via pseudo statique + cache , et utiliser les dépendances de cache intégrées et les dépendances de chaîne pour résoudre le problème de l'expiration du contenu et gérer les parties qui n'ont pas besoin à mettre en cache via le paramétrage du contenu dynamique, par exemple, après la connexion, le nom d'utilisateur peut être affiché sur la page d'accueil et le contenu dynamique peut être utilisé dans cette partie.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer