ホームページ >バックエンド開発 >PHPチュートリアル >yii2 のキャッシュ依存関係機能の使用方法 (コード例)

yii2 のキャッシュ依存関係機能の使用方法 (コード例)

不言
不言転載
2019-02-27 09:31:252149ブラウズ

この記事の内容は yii2 のキャッシュ依存機能の使い方 (コード例) についてであり、一定の参考価値があるので、困っている方は参考にしていただければ幸いです。

キャッシュは Yii2 の強力な機能の 1 つであり、キャッシュ テクノロジを適切に使用すると、サーバーへのアクセス圧力を効果的に軽減できます。 Yii2 の最も基本的なキャッシュには、Data CacheFragment CachePage CacheHTTP Cache が含まれます。コンテンツのこの部分は、詳細については、ここでは説明しませんが、必要に応じて、Yii2 公式開発ドキュメントのキャッシュのセクションを参照してください。

ページ キャッシュ

データ キャッシュとフラグメント キャッシュは、Web サイトの特定の部分のキャッシュです。このキャッシュは、コード部分で明示的に宣言して変更する必要があります。ハードの。相対ページ キャッシュはコントローラー配下のメソッド用であり、このメソッドのビュー ファイルはページ レベルでキャッシュされます。ページ キャッシュは動作の形式でコントローラーに挿入できるため、変更を行う場合はコントローラー内の対応する構成項目を変更するだけで済みます。そのため、ページ キャッシュの使用はより簡単でスケーラブルです。

キャッシュの依存関係

一般的に言えば、キャッシュはサーバーのパフォーマンスを向上させることができますが、ある程度対話性を弱めます。したがって、定期的にキャッシュをチェックし、期限切れのデータをクリーンアップし、最新のデータを入力して、コンテンツがタイムリーかつ正確であることを確認する必要があります。現時点では、Yii2 のキャッシュ依存性がこの問題を効果的に解決できます。 Yii2 には、次の 5 つの組み込みキャッシュ クラスがあります。

  • yii\caching\ChainedDependency: 依存関係チェーン内の依存関係が変更されると、依存関係も変更されます。

  • yii\caching\DbDependency: 指定された SQL ステートメントのクエリ結果が変更されると、依存関係が変更されます。

  • yii\caching\ExpressionDependency: 指定した PHP 式の実行結果が変化すると、依存関係が変化します。

  • yii\caching\FileDependency: ファイルの最終変更時刻が変更されると、依存関係も変更されます。

  • yii\caching\TagDependency: キャッシュされたデータ項目を 1 つ以上のタグに関連付けます。 yii\caching\TagDependency::invalidate() を呼び出すことで、指定したタグのキャッシュされたデータ項目が有効かどうかを確認できます。

データベースの依存関係 DbDependency を例として、コントローラー IndexController で依存関係を宣言します:

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

コードに示すように、動作メソッド behaviors() はページ構成のドライバー クラスを宣言し、only は配列に対応し、配列要素はキャッシュする必要があるメソッドに対応するビューです。期間は有効期限を秒単位で表します。バリエーションは配列に対応しており、システムはこの配列のコンテンツが変更されたかどうかを監視します。変更された場合はキャッシュが更新され、その逆も同様です。 dependency は依存関係に対応します。class はキャッシュが依存するクラスを表し、sql はクエリ ステートメントを表します。これは、ポストデータテーブルの総レコード数が変化した場合、何らかのデータが追加または削除されたと考えられ、キャッシュのリフレッシュが必要になるという意味です。

チェーンの依存関係

上記の例は非常に単純ですが、実際の開発はさらに複雑になることがよくあります。ページを更新する必要があるかどうかは、1 つの関係だけでは明確に説明できない多くの要因によって決定される場合があります。たとえば、post データ テーブルに削除も追加もなく、データの更新がある場合、上記のクエリ ステートメントはクラスを処理できません。現時点では、SELECT MAX(*) FROM post を使用して更新を検出できますが、これら 2 つのクエリを組み込みのページ キャッシュ クラスに直接書き込むことはできません。この問題を解決するには、チェーン依存関係の -in クラスを使用します。

いわゆるチェーン依存とは、キャッシュの依存関係をチェーン化することで、チェーン内の関係が確立されていない場合にはキャッシュが更新されます。
ここで、yii\caching\ChainedDependency は、キャッシュ依存関係の主要な実装クラスです。実装コードは次のとおりです。

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

上に示すように、依存関係でクラス Yii2 の組み込みチェーン依存関係を構成し、依存関係でクラス キャッシュ依存関係の「チェーン」を定義します。チェーン上の特定の関係が保持されない場合、キャッシュは更新されます。また、キャッシュされたページ全体のうち、キャッシュする必要のない部分を動的コンテンツとして設定することも可能で、この部分については公式ドキュメントを確認することもできますが、ソースコードを確認することをお勧めします。ドキュメントは比較的簡単です。

概要

Yii2 は静的 HTML ページ用の組み込み関数を提供しませんが、キャッシュ メカニズムを提供します。 Web サイトを開発する場合、疑似静的キャッシュを通じてコン​​テンツ ページを最適化し、組み込みのキャッシュ依存関係とチェーン依存関係を使用してコンテンツの有効期限の問題を解決し、更新する必要のない部分に対処できます。動的コンテンツの設定によりキャッシュすることができ、例えばログイン後のホームページにユーザー名を表示し、この部分に動的コンテンツを利用することができます。

以上がyii2 のキャッシュ依存関係機能の使用方法 (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。