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

PHP キャッシュ テクノロジの詳細

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-06-21 08:52:22
オリジナル
1241 人が閲覧しました

PHP は、近年登場した Web デザイン スクリプト言語であり、そのパワーと拡張性により、mssql を変換する場合、従来の ASP Web サイトと比較して、速度の点で大幅に進歩しています。たとえば、PHP では 60,000 個のデータを処理するのに 40 秒かかりますが、ASP では 2 分もかかりません。しかし、Web サイトのデータが増えるにつれて、データを削除する必要がなくなりました。ファイルや特定のメモリアドレスなど、データベースから毎回取得できます。これが PHP のキャッシュ技術、つまりキャッシュ技術です。

詳細な分析

一般的に、キャッシュの目的は、アクセスを高速化するためにデータを 1 か所に置くことです。メモリが最も高速であることは間違いありませんが、数百 M のデータをメモリに保存できるでしょうか? もちろん、これは非現実的な場合もあります。たとえば、ob_start() キャッシュ ページがオンになっている場合、ページのコンテンツは、ページ出力が自動的にクリアされるまで、または返されるまで、ファイル ヘッダーを送信する前にメモリにキャッシュされます。これは、静的ページの生成にうまく利用でき、テンプレートにうまく反映できます。

さらに、ASP にはパブリック パラメータを保存できるオブジェクト アプリケーションがあり、これもキャッシュとみなされますが、開発者がそのようなオブジェクトを作成するのはこれまで見たことがありません。実際、それは必要ありません。キャッシュ技術 ビューステートを使用しており、キャッシュはファイルの関連付けです (必ずしも正確であるとは限りません)。ファイルが変更されずにタイムアウトしない場合 (注 1)、キャッシュが読み取られます。これがアイデアです。このソースコードを見てください。

クラス キャッシュ{

/*

クラス名: キャッシュ

説明: データをキャッシュする制御、$cache_out_time はキャッシュの日付タイムアウトを保存する配列です。

バージョン: 1.0

作者: 老農夫 cjjer

最終更新日:2006-2-26

著者の URL: http://www.cjjer.com

*/

プライベート $cache_dir;

private $expireTime=180;//キャッシュ時間は60秒です

関数 __construct($cache_dirname){

if(!@is_dir($cache_dirname)){

if(!@mkdir($cache_dirname,0777)){

$this->warn('キャッシュ ファイルが存在しないため作成できません。手動で作成する必要があります。');

return false;

}

}

$this->cache_dir = $cache_dirname;

}

関数 __destruct(){

echo 'キャッシュクラスバイバイ。';

}

関数 get_url() {

if (!isset($_SERVER['REQUEST_URI'])) {

$url = $_SERVER['REQUEST_URI'];

}else{

$url = $_SERVER['SCRIPT_NAME'];

$url .= (!empty($_SERVER['QUERY_STRING'])) '?'

}

$url を返す;

}

----------------------------------

関数 warn($errorstring){

echo "エラーが発生しました:

".$errorstring."

";

}

関数cache_page($pageurl,$pagedata){

if(!$fso=fopen($pageurl,'w')){

$this->warns('キャッシュ ファイルを開けません。');//trigger_error

return false;

}

if(!flock($fso,LOCK_EX)){//LOCK_NB、排他的ロック

$this->warns('キャッシュ ファイルをロックできません。');//trigger_error

return false;

}

if(!fwrite($fso,$pagedata)){//バイトストリームを書き込み、シリアル化して他の形式を書き込みます

$this->warns('キャッシュ ファイルを書き込めません。');//trigger_error

return false;

}

flock($fso,LOCK_UN);//ロックを解放します

fclose($fso);

true を返します;

}

関数 display_cache($cacheFile){

if(!file_exists($cacheFile)){

$this->warn('キャッシュファイルを読み取れません。');//trigger_error

return false;

}

echo 'キャッシュ ファイルの読み取り:'.$cacheFile;

//return unserialize(file_get_contents($cacheFile));

$fso = fopen($cacheFile, 'r');

$data = fread($fso, filesize($cacheFile));

fclose($fso);

$data を返す;

}

関数 readData($cacheFile='default_cache.txt'){

$cacheFile = $this->cache_dir."/".$cacheFile;

if(file_exists($cacheFile)&&filemtime($cacheFile)>(time()-$this->expireTime)){

$data=$this->display_cache($cacheFile);

}else{

$data="ここからは mysql データベースから取得できます、更新時刻は ".date('l dS of F Y h:i:s A')."、有効期限は:".date('l dS of F Y h:i:s A',time()+$this->expireTime)."----------";

$this->cache_page($cacheFile,$data);

}

$data を返す;

}

}

?>

ここで、このコードを中断して 1 行ずつ説明します

人工透析

このキャッシュ クラス (このクラスでは何も恐れることはありません。読み続けてください) の名前は cache で、次の 2 つの属性があります:

プライベート $cache_dir;

プライベート $expireTime=180;

$cache_dir は、キャッシュされたファイルが配置される Web サイトのディレクトリを基準とした親ディレクトリです。$expireTime (注 1) は、主に次の考えに基づいて、キャッシュされたデータの有効期限です:

データまたはファイルがロードされると、最初にキャッシュ ファイルが存在するかどうかが判断され、ファイルの最終変更時刻とキャッシュ時刻の合計が現在時刻より大きいかどうかが判断されます。有効期限が切れていない場合は false を返します。 false の場合は、元のデータを読み取り、キャッシュ ファイルに書き込み、データを返します。次にプログラムを見てみましょう:

関数 __construct($cache_dirname){

if(!@is_dir($cache_dirname)){

if(!@mkdir($cache_dirname,0777)){

$this->warn('キャッシュ ファイルが存在しないため作成できません。手動で作成する必要があります。');

return false;

}

}

$this->cache_dir = $cache_dirname;

}

クラスが初めてインスタンス化されるとき、ファイル名をキャッシュするためのパラメーターを使用してデフォルト関数が構築され、ファイルが存在しない場合は編集権限を持つフォルダーが作成され、作成が失敗した場合に例外がスローされます。キャッシュ クラスの属性をこのフォルダー名に設定します。すべてのキャッシュ ファイルはこのフォルダーの下にあります。

function __destruct(){ echo 'キャッシュクラスバイ。' }

これは、クラス クラスのデストラクターです。デモンストレーションのために、キャッシュ クラス リソースが正常に解放されたことを示す文字列を出力します。

関数 warn($errorstring){

echo "エラーが発生しました:

".$errorstring."
"; }

このメソッドはエラー メッセージを出力します:

関数 get_url() {

if (!isset($_SERVER['REQUEST_URI'])) {

$url = $_SERVER['REQUEST_URI'];

}else{

$url = $_SERVER['SCRIPT_NAME'];

$url .= (!empty($_SERVER['QUERY_STRING'])) '?'

}

$url を返す;

}

このメソッドは、現在の URL の情報を返します。これは、主に x.PHP?page=1、x.PHP?page=2 などのファイルをキャッシュする海外の多くの人が行っている方法です。このキャッシュ クラスの機能を拡張するためにここにリストします。

関数cache_page($pageurl,$pagedata){

if(!$fso=fopen($pageurl,'w')){

$this->warns('キャッシュ ファイルを開けません。');//trigger_error

false を返します }
if(!flock($fso,LOCK_EX)){//LOCK_NB、排他的ロック
$this->warns('キャッシュ ファイルをロックできません。');//trigger_error
false を返します
}
if(!fwrite($fso,$pagedata)){//バイト ストリームを書き込み、シリアル化して他の形式を書き込みます
$this->warns('キャッシュ ファイルに書き込めません。');//trigger_error
false を返します
}
flock($fso,LOCK_UN);//ロックを解除します
fclose($fso); true を返します。





cache_page メソッドは、キャッシュされたファイル名とデータをそれぞれ渡します。これは、最初に fopen を使用してファイルを開き、次にハンドルを呼び出してファイルをロックし、次に fwrite を使用してファイルに書き込みます。最後にハンドルを放します。どのステップでもエラーが発生すると、次のコメントが表示される場合があります:

バイト ストリームに書き込み、他の形式に書き込むにはシリアル化します。ちなみに、配列を書き込みたい場合 (MySQL データベースから結果を選択できます)、書き込みにはシリアライズ関数を使用し、読み取りには unserialize を使用します。オリジナルタイプ。

関数 display_cache($cacheFile){

if(!file_exists($cacheFile)){

$this->warn('キャッシュファイルを読み取れません。');//trigger_error

return false;

}

echo 'キャッシュ ファイルの読み取り:'.$cacheFile;

//return unserialize(file_get_contents($cacheFile));

$fso = fopen($cacheFile, 'r');

$data = fread($fso, filesize($cacheFile));

fclose($fso);

$data を返す;

}

ファイル名でキャッシュを読み込む方法です。ファイルが存在しない場合や読み込めない場合は、もちろん false を返します。 🎜>

関数 readData($cacheFile='default_cache.txt'){ $cacheFile = $this->cache_dir."/".$cacheFile
if(file_exists($cacheFile)&&filemtime($cacheFile)>(time()-$this->expireTime)){
$data=$this->display_cache($cacheFile); }その他{
$data="ここからは mysql データベースから取得できます。更新時刻は ".date('l dS of F Y h:i:s A')."、有効期限は: ".date('l dS of F Y h:i:s A',time()+$this->expireTime)."----------";
$this->cache_page($cacheFile,$data); }
$data を返します



この関数は、私たちが呼び出すメソッドです。この関数は、受信パラメータを使用して、ファイルが存在するかどうか、およびファイルの最終変更時刻 + 有効期限が現在時刻を超えているかどうかを判断します (それが大きい場合)。ファイルが存在しない場合、または期限切れである場合は、ここでは簡単にするために、キャッシュ クラスを継承できます。データベースからデータを取得するための特定のクラス (注 2)

補足説明 まとめ

注 1: キャッシュ時間は、時間の状況に応じて自分で調整できます。キャッシュ時間 (つまり、キャッシュ キー) は、自分の都合に合わせて変更してください。これは CMS システムで広く使用されており、更新されるキーが戦闘全体を制御するのに非常に簡単です。

注 2: PHP5 はクラス継承のサポートを開始します。これは興味深いことです。構成されたクラスで Web サイトの残りのグローバル部分を記述し、次にデータ層と対話するクラス (MySQL と対話するクラスなど)、つまりキャッシュ クラスを記述します。データ対話クラスはデータベースを簡単に読み取ることができます。これについては、時間があるときに詳しく説明しません。



関連ラベル:
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート