キャッシュとは、ツールや材料をワークベンチに移動するのと同じように、コンピュータが最もよく使用されるファイルをメモリから取得してキャッシュに一時的に配置することを意味します。これは、それらを倉庫に取りに行くよりも便利です。使用されるとき。キャッシュは RAM (電源を切ると失われる非永続的な記憶域) を使用することが多いため、作業が完了した後もファイルは永続的な記憶域としてハードディスクやその他の記憶域に送信されます。コンピュータの最大のキャッシュはメモリ スティックです。最も高速なものは、CPU に組み込まれている L1 キャッシュと L2 キャッシュです。ハード上には 16M または 32M のキャッシュもあります。ディスク。キャッシュを単一のものとして理解しないでください。キャッシュは処理方法の総称です。
WEB 開発における高トラフィックに対処する最も効果的な方法は、キャッシュ テクノロジを使用することです。これにより、サーバーの負荷パフォーマンスを効果的に向上させ、時間とスペースを交換できます。
インターネットも 2 8 結論です。Baidu 検索のキーワードと同じように、80% の人がコンテンツの 20% を検索しているため、これらのキーワードの 20% のコンテンツを保存するだけで済みます。それが優れていれば、数十億のレコードの中からユーザーが必要とするコンテンツを非常に効率的に素早く返すことができます。
この記事では、PHP WEB 開発で一般的に使用されるいくつかの保存方法を見てみましょう。
1. ユニバーサル キャッシュ テクノロジ:
データ キャッシュ: ここで説明するデータ キャッシュは、ページがアクセスされるたびに、データベース クエリの PHP キャッシュ メカニズムを指します。まず、対応するキャッシュ データが存在するかどうかを検出し、存在しない場合は、データベースに接続してデータを取得し、クエリ結果をシリアル化してファイルに保存します。キャッシュテーブルまたはファイル。
最も広く使用されている例は、結果 ID をテーブルにキャッシュし、次回同じキーワードを検索するときに最初にキャッシュ テーブルを検索する Discuz の検索機能です。
一般的な方法として、複数のテーブルを関連付けた場合、添付されたテーブルの内容が配列に生成され、必要に応じて配列が分解されて保存されます。読み取りできるテーブルが 1 つだけであるということですが、欠点は、2 つのデータを同期するためにさらに多くの手順が必要になることです。これは、速度と引き換えにハードディスクを使用することが重要です。
2. ページ キャッシュ:
ページにアクセスするたびに、まず対応するキャッシュされたページ ファイルが存在するかどうかを確認します。存在しない場合は、に接続します。データベースを取得してデータを取得し、ページを表示すると同時にキャッシュページファイルを生成します。これにより、ページファイルは次回訪問時に有効になります。 (インターネット上のテンプレート エンジンと一部の一般的な PHP キャッシュ メカニズム クラスには通常この機能があります)
3. 時間トリガー キャッシュ:
ファイルが存在するかどうかを確認します。タイムスタンプが有効期限の設定より小さい場合、ファイル変更タイムスタンプが現在のタイムスタンプから有効期限タイムスタンプを引いた値より大きい場合はキャッシュを使用し、それ以外の場合はキャッシュを更新します。
4. コンテンツトリガーキャッシュ:
データが挿入または更新されると、PHP キャッシュ メカニズムが強制的に更新されます。
5. 静的キャッシュ:
ここでいう静的キャッシュとは、HTML や XML などのテキストファイルを静的に直接生成し、更新があった場合に再生成するものを指します。 、あまり変更のないページに適しているため、ここでは説明しません。
上記の内容は、他のフレームワークを直接 CP するコードレベルのソリューションであり、変更するのが面倒です。内容は似ており、簡単に実行でき、さまざまな方法で使用できます。ただし、以下の内容はサーバー側のキャッシュ ソリューションであり、コード レベルではありません。
6. メモリ キャッシュ:
Memcached は高性能で分散型です。データベースの負荷を軽減し、動的アプリケーションでのアクセス速度を向上させるために使用されるメモリベースのオブジェクト PHP キャッシュ メカニズム システムです。
7. PHP バッファ:
これについては詳しく説明しません。
8. MYSQL キャッシュ:
これは、クラシック データベースでもこのメソッドが使用されていると考えられます。実行時間以下、0.09xxx など
9. リバースプロキシベースの Web キャッシュ:
Nginx、SQUID、mod_proxy など (apache2 以降はmod_proxy と mod_cache の場合)
10. DNS ポーリング:
BIND は、自分で検索してください。 、これが存在することをみんなに知らせてください。
chinacache などの一部の大規模 Web サイトでは、これを行っていることを知っています。簡単に言うと、同じページまたはファイルが異なるサーバーにキャッシュされ、北と南に応じて適切なサーバーに自動的に解析されます。
なぜキャッシュテクノロジーを使用するのですか?理由は簡単、効率が上がるからです。プログラム開発では、情報を取得する主な方法は、Web サービスまたはその他の方法を使用することもあります。どの方法を使用しても、大規模な問題に直面すると効率のボトルネックになる可能性があります。これらの問題を解決するために、人々は多くの解決策を提案していますが、その中には、プログラムの実行効率を向上させる最適化ソフトウェア (APC、Eaccelerator、Zend Optimizer など) を使用するものもあります。これらのソフトウェアを使用すると、多くの場合、効率が大幅に向上しますが、仮想ホストを使用している場合は、これらのソフトウェアをインストールできるようにホストを制御する必要があります。サービスプロバイダーが何らかの最適化ソフトウェアをプリインストールしていることを祈るしかありません。そうでない場合は、PHP を使用して対応するキャッシュ機能を実装する必要があります。もしこれで迷ったなら、次の文章がインスピレーションを与えてくれると思います。
多くの PHP プログラマーは Adodb Smarty などのゴールデン パートナーを使用しているため、まずそのキャッシュ機能の使用方法を見てみましょう。
まず、adodb が提供するデータ キャッシュ関数を確認します。
include('adodb.inc.php') # ADOdb に共通のコードをロードします
$ ADODB_CACHE_DIR = '/usr/ADODB_cache';
$conn = &ADONewConnection('mysql'); # 接続を作成します
$conn->PConnect('localhost','userid','','agora ' );# MySQL に接続し、agora db
$sql = '顧客から CustomerName、CustomerID を選択';
$rs = $conn->CacheExecute(15,$sql)>
上記のように、データがクエリされるたびに、対応する結果がシリアル化され、ファイルに保存されます。今後は、データベースに直接クエリを実行しなくても、同じクエリ ステートメントをキャッシュ ファイルから取得できます。
Smarty が提供するページ キャッシュ関数を見てみましょう。
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->caching = true;
if(!$smarty->is_cached('index.tpl')) {
// 利用可能なキャッシュはありません。
$contents = get_database_contents();
$smarty->assign($contents);
$smarty->display('index.tpl) ');
?>
上記のように、ページにアクセスするたびに、まず対応するキャッシュが存在するかどうかを検出し、データベースに接続してデータを取得します。テンプレート変数の割り当てを完了し、ページを表示すると同時にキャッシュ ファイルが生成され、次回アクセス時にそのキャッシュ ファイルが使用され、if ブロックのデータ クエリ文は実行されません。実行されました。もちろん、有効期間の設定やキャッシュグループの設定など、実際に使用する際には考慮すべき点がたくさんあります。詳細については、Smarty マニュアルのキャッシュに関する該当の章を確認してください。
上記の 2 つの一般的な PHP コンポーネント キャッシュ方法は、Adodb のキャッシュではデータをキャッシュするのに対し、Smarty のキャッシュではページをキャッシュすることに焦点が異なります。キャッシュ機能を提供するコンポーネントは他にも多数あります (PEAR::Cache_Lite など)。実際のプログラミングでどのソリューションを使用するかには、特定の状況の具体的な分析が必要であり、包括的に使用することもできます。
これらのコンポーネントの組み込みキャッシュ ソリューションを使用する明らかな利点は、その実装がクライアントに対して透過的であることです。キャッシュの詳細を考えずに、必要な設定(キャッシュ時間、キャッシュ ディレクトリなど)を行うだけで、システムが設定に従って自動的にキャッシュを管理します。しかし、その欠点も明らかです。なぜなら、各リクエストは依然として PHP によって解析される必要があり、この場合、単に動的を実行するだけでは、純粋な静的リクエストと比較して効率が大幅に低下するからです。はい、キャッシュだけでは十分ではありません。静的キャッシュを実装する必要があります。