PHPはキャッシュラインを返さないのでしょうか?複数の実装
1. ユニバーサル キャッシュ テクノロジー:
データ キャッシュ: ここで言うデータ キャッシュとは、ページにアクセスするたびに、まず対応するキャッシュ データが存在するかどうかを検出し、データベースに接続して取得します。データとクエリ結果はシリアル化され、ファイルに保存されます。将来、同じクエリ結果がキャッシュ テーブルまたはファイルから直接取得されます。
最も広く使用されている例は、結果 ID をテーブルにキャッシュし、次回同じキーワードを検索するときに最初にキャッシュ テーブルを検索する Discuz の検索機能です。
一般的な方法としては、複数のテーブルを関連付けた場合、添付されたテーブルの内容を配列に生成し、必要に応じて配列を分解して保存するという点だけです。 1 つのテーブルを読み取ることはできますが、欠点は、2 つのデータを同期するためにさらに多くの手順が必要になることです。これは、速度を犠牲にすることが常にボトルネックになります。
2. ページキャッシュ:
ページにアクセスするたびに、まず対応するキャッシュされたページ ファイルが存在するかどうかを確認し、存在しない場合はデータベースに接続してデータを取得し、ページを表示し、同時にキャッシュされたページ ファイルを生成します。 、次回アクセスしたときにページファイルが同じになるようにします。 (インターネット上のテンプレート エンジンと一部の一般的な PHP キャッシュ メカニズム クラスには通常、この機能があります)
3. 時間トリガーキャッシュ:
ファイルが存在し、タイムスタンプが設定された有効期限よりも小さいかどうかを確認し、ファイル変更タイムスタンプが現在のタイムスタンプから有効期限タイムスタンプを引いた値より大きい場合はキャッシュを使用し、それ以外の場合はキャッシュを更新します。 。
4. コンテンツトリガーキャッシュ:
データが挿入または更新されるときに、PHP キャッシュ メカニズムが強制的に更新されるようにします。
5. 静的キャッシュ:
ここでいう静的キャッシュとは、HTMLやXMLなどのテキストファイルを直接生成し、更新があったときに再生成する静的キャッシュのことを指します。あまり変更のないページに適していますので、説明は省略します。それはここです。
6. メモリキャッシュ:
Memcached は、高性能の分散メモリ オブジェクト PHP キャッシュ メカニズム システムであり、データベースの負荷を軽減し、動的アプリケーションでのアクセス速度を向上させるために使用されます。
7. PHP バッファ:
eaccelerator、apc、phpa、xcache については説明しません。そのようなものがあることを知っていれば、問題ありません。 🎜>
8、 MYSQL キャッシュ:
これは非コード レベルとも見なされます。クラシック データベースはこの方法を使用します。以下の実行時間を見ると、0.09xxx のようです。
9. リバースプロキシに基づく Web キャッシュ:
Nginx、SQUID、mod_proxy など(apache2 以降は mod_proxy と mod_cache に分かれています)
10. DNS ポーリング:
BIND はオープンソースの DNS サーバー ソフトウェアです。これは、自分で調べてみるとわかります。
chinacache などの一部の大規模 Web サイトでは、これが行われています。簡単に言うと、同じページまたはファイルが異なるサーバーにキャッシュされ、北と南に応じて適切なサーバーに自動的に解析されます。
5 番目の方法の場合は次のとおりです:
コード:
1.
テストデータベースを作成します
データベース lxr を作成します;lxr を使用します;
テーブルニュースを作成(
id int unsigned Primary key auto_increment, /*
ニュースid*/
title varchar(128) not null,/*ニュースタイトル*/
content varchar(256) not null,/*ニュースコンテンツ*/
filename varchar(32)) /*静的ページ名を記録します*/engine=MyISAM
2.テストデータ
ニュース (タイトル、コンテンツ) に挿入 value('hello1','こんにちは北京');
ニュース (タイトル、コンテンツ) に挿入 value('hello2','こんにちは四川省');
news_list.php コードは次のとおりです:
//ニュース一覧 $conn=mysql_connect("localhost","root","root"); if(!$conn){ die("接続に失敗しました"); } mysql_select_db("lxr",$conn); //mysql_query("set names utf8"); $sql="ニュースから * を選択"; $res=mysql_query($sql); header("content-type:text/html;charset=utf-8"); echo "ニュースリスト"; echo " echo " while($row=mysql_fetch_assoc($res)){ 「< tr> } echo " //リソースを閉じる mysql_free_result($res); mysql_close($conn); ?> show_news.php
//id $id=@$_GET['id']; //html静的ページ // html ページが存在するかどうかを確認します。存在する場合は、 //ファイル名を作成します. $html_filename="news_id".$id.".html"; //filemtime()=>ファイルの最終変更時刻を取得します //filemtime($html_filename)+30>time()
は静的ファイルを表し、 if(file_exists($html_filename)&& filemtime($html_filename)+30>time()){
//html ページに直接アクセスします(html ページのコンテンツを配置します
エコーブラウザ) echo file_get_contents($html_filename); 終了; } $conn=mysql_connect("localhost","root","root");
if(!$conn){ die("连接失败"); } mysql_select_db("lxr",$conn);
$sql="select * from news where id=$id"; $res=mysql_query($sql); //开启ob缓存 ob_start(); if($row=mysql_fetch_assoc($res)){ header("content-type:text/html;charset=utf-8"); echo " echo " echo " echo " echo " }else{ echo "没有结果"; } $html_content=ob_get_contents(); $my_hader=""; //Put ob->$html_filename (必要に応じて、パスを考慮する必要があります) file_put_contents($html_filename,$my_hader.$html_content); mysql_free_result($res); mysql_close($conn); ?> 使用法: 上記の SQL スクリプトを使用してデータベースとテーブルを作成します。上記 2 つの php ファイルを開発環境に配置します。最初の news_list.php を実行して静的ページを生成します。 私の要約は次のとおりです: 実際には、ob_start(); ob_get_contents(); の 2 つの関数だけです。これら 2 つの関数の間に、キャッシュされたコンテンツが返されます。 ob_get_contents 関数。 そして、file_put_contents($html_filename,$my_hader.$html_content) を使用して、キャッシュされたページをファイル if(file_exists($html_filename)&& filemtime($html_filename)+30>time()){
//html ページに直接アクセスします(html ページのコンテンツを配置します
エコーブラウザ) echo file_get_contents($html_filename); 終了; } 読み込み時には、まずファイルが存在するかどうかを確認し、存在する場合は直接エコーし、データベースを操作してファイルに書き込みます。 上記は PHP 自体のキャッシュ機構に関するものです。実際には、習得する必要のあるテクノロジーがたくさんあります。 皆さん、賛成です。 。 。 ";
";gt; " ;idタイトル詳細を表示< ;/td>
{$row['id']} {$row['title']} < td>詳細を表示";
"; ";新闻详细内容 ";{$row['title']} ";{$row['content']}