ホームページ >php教程 >php手册 >PHPデータキャッシュテクノロジー

PHPデータキャッシュテクノロジー

WBOY
WBOYオリジナル
2016-06-13 12:33:19926ブラウズ

データ キャッシュは、Web 開発で一般的に使用されるパフォーマンス最適化方法です。現在、ファイル キャッシュとデータベース キャッシュには 2 つの主な形式があります。データベース キャッシュは不可能ではなく、確かに非常に優れており重要です。従来のデータベースは主にビジネス層やモジュール設計などから検討されているのに対し、キャッシュデータベースは主によく使われる複数テーブルのクエリをキャッシュするために実装層から設計されていると思います。ここで重要なのはファイルのキャッシュです。インターネット上には多くの情報があります。ここではいくつかの基本的な情報を転載します。
キャッシュは、「時間のためのスペース」戦略の典型的なアプリケーション モードであり、システムのパフォーマンスを向上させる重要な方法です。キャッシュを使用すると、アクセス量が多い場合にデータベース操作の数が大幅に削減され、システムの負荷が大幅に軽減され、システムのパフォーマンスが向上します。ページ キャッシュと比較して、結果セットはフォーマット情報を含まない一種の「生データ」であり、データ量が比較的少なく、再フォーマットできるため、非常に柔軟です。 PHP は「コンパイルと実行を同時に行う」スクリプト言語であるため、結果セットのキャッシュをある程度まで使用する非常に便利な方法も提供します。つまり、対応するデータ定義コード セグメントを動的に含めることによってキャッシュを使用します。 「RamDisk」上にキャッシュを構築すればさらに効率が上がるはずです。以下は参考用の小さなサンプルコードです。

<span style="COLOR: #000000"><br><span style="COLOR: #0000bb"><? <BR></SPAN><SPAN style="COLOR: #ff8000">// キャッシュを使用してデータをロード <br><br></SPAN><SPAN style="COLOR: #007700">function </SPAN><SPAN style="COLOR: #0000bb">load_data</SPAN><SPAN style="COLOR: #007700">(</SPAN><SPAN style="COLOR: #0000bb">$id </SPAN><SPAN style="COLOR: #007700">,</SPAN><SPAN style="COLOR: #0000bb">$cache_lifetime</SPAN><SPAN style="COLOR: #007700">) { <br><br></SPAN><SPAN style="COLOR: #ff8000">// 戻りデータ <br><br></SPAN><SPAN style="COLOR: #0000bb">$data </SPAN><SPAN style="COLOR: #007700">= array();  <br><br></SPAN><SPAN style="COLOR: #ff8000">// make cache filename <br><br></SPAN><SPAN style="COLOR: #0000bb">$cache_filename </SPAN><SPAN style="COLOR: #007700">= </SPAN><SPAN style="COLOR: #0000bb">'cache_'</SPAN> <SPAN style="COLOR: #007700">.</SPAN><SPAN style="COLOR: #0000bb">$id</SPAN><SPAN style="COLOR: #007700">.</SPAN><SPAN style="COLOR: #0000bb">'</SPAN><SPAN style="COLOR: #007700">.</SPAN><SPAN style="COLOR: #0000bb">php'</SPAN><SPAN style="COLOR: #007700">;  <br><br></SPAN><SPAN style="COLOR: #ff8000">// キャッシュ ファイルの最終変更時刻を確認 <br><br></SPAN><SPAN style="COLOR: #0000bb">$cache_filetime </SPAN><SPAN style="COLOR: #007700">= </SPAN><SPAN style="COLOR: #0000bb">filemtime </SPAN><SPAN style="COLOR: #007700">(</SPAN><SPAN style="COLOR: #0000bb">$cache_filename</SPAN><SPAN style="COLOR: #007700">);  <br><br>if (</SPAN><SPAN style="COLOR: #0000bb">時間</SPAN><SPAN style="COLOR: #007700">() - </SPAN><SPAN style="COLOR: #0000bb">$cache_filetime </SPAN><SPAN style="COLOR: #007700"><= </SPAN><SPAN style="COLOR: #0000bb">$cache_lifetime</SPAN><SPAN style="COLOR: #007700">) { <br><br></SPAN><SPAN style="COLOR: #ff8000">//** キャッシュは期限切れではありません <br><br></SPAN><SPAN style="COLOR: #007700">include(</SPAN><SPAN style="COLOR: #0000bb">$cache_filename </SPAN><SPAN style="COLOR: #007700">);  <br><br>} else { <br><br></SPAN><SPAN style="COLOR: #ff8000">//** キャッシュの有効期限が切れています <br><br>// データベースからデータをロードします <br><br>// 。 .. <br><br></SPAN><SPAN style="COLOR: #007700">while (</SPAN><SPAN style="COLOR: #0000bb">$dbo</SPAN><SPAN style="COLOR: #007700">-></span><span style="COLOR: #0000bb">nextRecord</span><span style="COLOR: #007700">()) { <br><br></span><span style="COLOR: #ff8000">// $data[] = ... <br><br></span><span style="COLOR: #007700">} <br><br></span><span style="COLOR: #ff8000">// 形式PHP ファイルとしてのデータ <br><br></span><span style="COLOR: #0000bb">$data_cache </span><span style="COLOR: #007700">=</span><span style="COLOR: #dd0000">" <br><br>while (list($key, $val) = each($data)) { <br><br>$data_cache .= "</span><span style="COLOR: #0000bb">$data</span><span style="COLOR: #007700">[</span><span style="COLOR: #0000bb">'$key'</span><span style="COLOR: #007700"> ]=array(</span><span style="COLOR: #0000bb">'</span><span style="COLOR: #dd0000">"; <br><br>$data_cache .= "</span><span style="COLOR: #0000bb">'NAME'</span><span style="COLOR: #007700">=></span><span style="COLOR: #dd0000">""</span><span style="COLOR: #007700">.</span><span style="COLOR: #0000bb">qoute</span><span style="COLOR: #007700">(</span><span style="COLOR: #0000bb">$val</span><span style="COLOR: #007700">[</span><span style="COLOR: #0000bb">'NAME '</span><span style="COLOR: #007700">]).</span><span style="COLOR: #dd0000">""," <br><br></span><span style="COLOR: #0000bb">$data_cache </span><span style="COLOR: #007700">.= </span><span style="COLOR: #dd0000">"' VALUE'=>""</span><span style="COLOR: #007700">.</span><span style="COLOR: #0000bb">qoute</span><span style="COLOR: #007700">(</span><span style="COLOR: #0000bb">$val</span><span style="COLOR: #007700">[</span><span style="COLOR: #0000bb">' VALUE'</span><span style="COLOR: #007700">]).</span><span style="COLOR: #dd0000">""" <br><br></span><span style="COLOR: #0000bb">$data_cache </span><span style="COLOR: #007700">.= </span><span style="COLOR: #dd0000">"; );rn"</span><span style="COLOR: #007700">; <br><br>}<br><br></span><span style="COLOR: #0000bb">$data_cache </span><span style="COLOR: #007700">= </span><span style="COLOR: #dd0000">"?>rn"</span><span style="COLOR: #007700"><br><br>// データをキャッシュ ファイルに保存します </span><span style="COLOR: #ff8000"><br><br>if (</span><span style="COLOR: #007700">$fd </span><span style="COLOR: #0000bb">= </span><span style="COLOR: #007700">fopen</span> <span style="COLOR: #0000bb">(</span><span style="COLOR: #007700">$cache_filename</span><span style="COLOR: #0000bb">,</span><span style="COLOR: #007700">'w</span><span style="COLOR: #0000bb"> </span><span style="COLOR: #007700">'</span><span style="COLOR: #0000bb">)) { </span><span style="COLOR: #007700"><br><br>fputs</span><span style="COLOR: #0000bb">(</span><span style="COLOR: #007700">$fd</span><span style="COLOR: #0000bb">,</span><span style="COLOR: #007700">$data_cache</span><span style="COLOR: #0000bb">); </span><span style="COLOR: #007700"><br><br>fclose</span><span style="COLOR: #0000bb">(</span><span style="COLOR: #007700">$fd</span><span style="COLOR: #0000bb">) </span><span style="COLOR: #007700">} <br><br>} <br><br>return <br><br>$data</span><span style="COLOR: #0000bb">} </span><span style="COLOR: #007700"><br><br>?><br> <br> </span><span style="COLOR: #0000bb"></span><br><br>該当する状況: </span>1. データは、主に読み取り操作に対して比較的安定しています。 2. ファイル操作はデータベース操作よりも高速です。
3. 複雑なデータアクセス、大量のデータアクセス、集中的なデータアクセスにより、システムデータベースの負荷が非常に高くなります。
4.Web/DB分離構造またはマルチWeb単一DB構造。

未確認の問題:
1. 同時アクセス中にファイルの読み取りと書き込みを行うと、ロックの問題が発生します。
2. 関係するデータ ファイルが多すぎる場合のパフォーマンスはどうですか?
拡張アイデア:
1. JavaScript データ定義コードを生成し、クライアントで呼び出します。
2. まだ考えていません...

一緒に話し合えればと思っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。