WEB プログラムが情報を取得する主な方法は、データベースにクエリを実行することですが、データベースがそれほど大きくない場合は、それほど問題はありません。しかし、Web サイトが発展しデータベースが急激に増大すると、ボトルネックが発生するため、PHP キャッシュ テクノロジーが誕生しました。 PHP キャッシュ テクノロジが機能すると、プログラムがデータをクエリすると、対応する結果がシリアル化されてファイルに保存され、将来はデータベースに直接クエリを実行しなくても、同じクエリ ステートメントをキャッシュ ファイルから取得できます。この改善により、プログラムの実行速度が大幅に向上しました。
PHP キャッシュ テクノロジのアプリケーションは非常に一般的であるため、このテクノロジについてあまり知らない人もいるかもしれません。ここでは、PHP キャッシュ テクノロジの関連アプリケーション スキルを詳しく紹介します。
ほとんどの場合、当社のウェブサイトはサイトデータストレージのコンテナとしてデータベースを使用します。 SQL クエリを実行するときの一般的なプロセスは、データベースに接続する -> SQL クエリを準備する -> クエリをデータベースに送信する -> データベースから返される結果を取得する -> データベース接続を閉じるというものです。ただし、データベース内の一部のデータは完全に静的であるか、頻繁に変更されません。キャッシュ システムは SQL クエリの結果をより高速なストレージ システムにキャッシュするため、頻繁なデータベース操作を回避し、プログラムの実行時間を大幅に短縮できます。後で処理してください。
1. PHP キャッシュ技術データキャッシュ
ここで言うデータ キャッシュとは、ページにアクセスするたびに、まず対応するキャッシュ データが存在するかどうかを検出し、データベースに接続してデータを取得し、シリアル化します。クエリ結果をファイルに保存すると、今後は同じクエリ結果がキャッシュ テーブルまたはファイルから直接取得されます。最も広く使用されている例は、結果 ID をテーブルにキャッシュし、次回同じキーワードを検索するときに最初にキャッシュ テーブルを検索する Discuz の検索機能です。
一般的な方法では、複数のテーブルが関連付けられている場合、配列を生成し、アタッチされたテーブルの内容をメイン テーブルのフィールドに保存します。これには、1 つのテーブルのみを読み取るという利点があります。 2 つの欠点があります。データの同期にはさらに多くの手順が必要であり、データベースが常にボトルネックになります。速度を優先することが重要です。
2. PHP キャッシュテクノロジーのページキャッシュ
ページにアクセスするたびに、まず対応するキャッシュされたページ ファイルが存在するかどうかを検出し、存在しない場合はデータベースに接続してデータを取得し、ページを表示し、同時にキャッシュされたページ ファイルを生成します。次回アクセスしたときにページ ファイルが有効になることを確認します。 (インターネット上のテンプレート エンジンといくつかの一般的なキャッシュ クラスには通常、この機能があります)
3. PHP キャッシュテクノロジーのメモリキャッシュ
ここでは紹介しません。この記事で議論する内容ではありません。簡単に言及するだけです:
Memcached は、データベースの負荷を軽減し、動的アプリケーションのアクセス速度を向上させるために使用される、高性能の分散メモリ オブジェクト キャッシュ システムです。 dbcached は、Memcached と NMDB に基づく分散キー値データベース メモリ キャッシング システムです。上記のキャッシュ テクノロジは頻繁なデータベース クエリの問題を効果的に解決できますが、データがタイムリーではないという欠点があります。
4. PHP キャッシュテクノロジーの時間トリガーキャッシュ
ファイルが存在し、タイムスタンプが設定された有効期限よりも小さいかどうかを確認します。ファイル変更タイムスタンプが現在のタイムスタンプから有効期限タイムスタンプを引いた値より大きい場合は、キャッシュを使用し、それ以外の場合はキャッシュを更新します。設定時間内にデータ更新の要否を判断せず、設定時間経過後にキャッシュを更新します。上記は、適時性の要件が高くない場合の使用にのみ適しています。
5. PHP キャッシュテクノロジーのコンテンツトリガーキャッシュ
データが挿入または更新されるときにキャッシュを強制的に更新します。ここでは、大量のデータを頻繁に更新する必要がある場合、最終的にはディスクの読み取りおよび書き込み操作が必要になることがわかります。どうやって解決すればいいでしょうか?日々のプロジェクトでは、通常、すべてのコンテンツをキャッシュするのではなく、問題を解決するために頻繁に変更されない一部のコンテンツをキャッシュします。ただし、負荷が高い場合は、共有メモリをキャッシュ システムとして使用するのが最善です。
現時点では、PHP キャッシュが解決策になる可能性がありますが、その欠点は、依然として各リクエストを PHP で解析する必要があるため、負荷が高い場合には効率の問題がさらに深刻になることです。この場合、静的キャッシュが使用される可能性があります。
6. PHP キャッシュ技術の静的キャッシュ
ここで言う静的キャッシュは HTML キャッシュを指します。HTML キャッシュは、通常、HTML が使用される場合、コンテンツが頻繁に変更されないページであるため、通常、データを更新する必要があるかどうかを判断する必要はありません。データが更新された場合は、HTML を強制的に更新するだけです。
上記のキャッシュ方法に加えて、コードレベル以外のサーバー側キャッシュ ソリューションもいくつかあります。
- PHP のバッファ: eaccelerator、apc、phpa、xcache があります。これらについては詳しく説明しませんが、そのようなものがあることを知っていれば問題ありません。
MySQL キャッシュ: これは非コード レベルとも見なされます。クラシック データベースはこの方法を使用します。以下の実行時間を見ると、0.09xxx のようです。 -
リバースプロキシに基づくWebキャッシュ: Nginx、SQUID、mod_proxyなど(apache2以降はmod_proxyとmod_cacheに分かれています)-
DNS ポーリング: BIND はオープンソースの DNS サーバー ソフトウェアです。これについては、誰もが知っています。
chinacache などの一部の大規模 Web サイトでは、これを行っていることを知っています。簡単に言うと、同じページまたはファイルが異なるサーバーにキャッシュされ、北と南に応じて適切なサーバーに自動的に解析されます。 -
http://www.bkjia.com/PHPjc/752387.htmlwww.bkjia.com本当http://www.bkjia.com/PHPjc/752387.html技術記事 WEB プログラムが情報を取得する主な方法は、データベースにクエリを実行することですが、データベースがそれほど大きくない場合は、それほど問題はありません。ただし、Web サイトが発展するにつれて、データベースは飛躍的に増大します...