ホームページ  >  記事  >  バックエンド開発  >  キャッシュテクノロジーの詳細な説明 - php_PHP チュートリアル

キャッシュテクノロジーの詳細な説明 - php_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:59:29752ブラウズ

1. はじめに

近年登場した Web デザインスクリプト言語である PHP は、そのパワーと拡張性により、従来の ASP Web サイトと比較して、速度が断然速いという利点があります。 60,000 個のデータを mssql 経由で PHP に転送するには 40 秒かかりますが、ASP では 2 分以上かかります。しかし、Web サイトのデータはますます増えているため、Web サイトからデータを削除せずに、より速くデータを呼び出すことができるようにしたいと考えています。毎回、データベースを使用して、ファイルや特定のメモリ アドレスなどの他の場所からデータを取得できます。これは、PHP のキャッシュ テクノロジです。

2 番目の詳細な分析

。キャッシュの目的はデータを保存することです。1 か所へのアクセスを高速化するには、メモリが最も速いのは間違いありませんが、数百 M のデータをそこに保存できるでしょうか。もちろん、これは非現実的な場合もあります。 ob_start() などのサーバー キャッシュ内 このキャッシュ ページがオンになっている場合、ページのコンテンツはファイル ヘッダーの送信前にメモリにキャッシュされます。ページの出力時に自動的にクリアされるか、待機します。 ob_get_contents を返すか、ob_end_clean 表示によってクリアされます。これは良い使い方であり、テンプレートにうまく反映できます。私たちの問題を解決する良い方法です

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


PHP:[クリップボードにコピー]
クラス キャッシュ{
/*
クラス名:cache
説明:データをキャッシュするためのコントロール、$cache_out_time はキャッシュの日付タイムアウトを保存するための配列です。 /www.cjjer.com
*/
private $cache_dir;
private $expireTime=180;//キャッシュ時間は 60 秒です
function __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 'キャッシュクラス bye.';
}

function get_url() {
if (! isset($_SERVER['REQUEST_URI' )){_Server [Query_string])

".$errorstring."
";
}

function 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 を返す
}

function display_cache($cacheFile){
warn ('キャッシュ ファイルを読み取れません。') //trigger_error
return false;
}
echo 'キャッシュ ファイルの読み取り:'.$cacheFile;
//return unserialize(file_get_contents($cacheFile));
$data = fread($fso, filesize ( $cacheFile));
fclose($fso);
return $data;

function readData($cacheFile='default_cache.txt'){
$cacheFile = $this->cache_dir."/"キャッシュファイル;
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- > queue_page($cacheFile,$data);
}
return $data;




3 つ目は、プログラム分析です。キャッシュ クラスの名前 (心配する必要はありません。読み続けてください) は、cache で、次の 2 つの属性があります:


CODE:[クリップボードにコピー]private
private $expireTime=180;はキャッシュ ファイルが配置される場所です。Web サイト ディレクトリの親ディレクトリを基準にして配置されます。$expireTime (注 1) は、キャッシュされたデータの有効期限です。主な考え方は次のとおりです。
データまたはファイルがロードされるとき、最初に、キャッシュ ファイルが存在する場合は false を返し、ファイルの最終変更時刻とキャッシュ時刻の合計が現在時刻より大きい場合は、キャッシュが期限切れになっていないことを意味します。小さい場合は false を返します。 false が返され、元のデータが読み取られ、キャッシュ ファイルに書き込まれ、データが返されます。

PHP:[クリップボードにコピー]
function __construct($cache_dirname){
if (!@is_dir($cache_dirname)){
if(!@mkdir($cache_dirname,0777)){
$ this->warn('キャッシュ ファイルは存在しないため作成できません。手動で作成する必要があります.');
return false; }
}
$this->cache_dir = $cache_dirname;



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


PHP:[クリップボードにコピー]
function __destruct(){
echo 'Cache class bye.';



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


PHP:[クリップボードにコピー]
function warn($errorstring){
echo "エラーが発生しました:
".$errorstring."
";
}



このメソッドはエラー情報を出力します。


PHP:[クリップボードにコピー]
function get_url() {
if (!isset($_SERVER['REQUEST_URI'])) {
$url = $_SERVER['REQUEST_URI']
$ url = $_SERVER['SCRIPT_NAME']
戻る$url ;このメソッドは、現在の URL の情報を返します。これは、主に x.php?page=1、x.php?page=2 などのファイルをキャッシュする海外の CMS システムでよく見られることです。 、キャッシュ クラス関数を拡張するためにここにリストされています。 $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);
return true;



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

バイトストリームに書き込み、他の形式に書き込むにはシリアル化
ちなみに、配列を使用したい場合は(MySQLデータベースからクエリの結果を選択できます)、serialize関数を使用してください。それを書いて、元のタイプを読むために使用します:[Copy to Clipboard] Display_Cache($ cachefile) ;
//return unserialize(file_get_contents($cacheFile));
$fso = fopen($cacheFile, 'r ');
$ Data = FREAD ($ FSO, Filesize ($ Cachefile);
FClose ($ FSO);
Return $ data; ファイルが存在しない場合、または読み取れない場合は、もちろん false を返します。


function 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);
return $data;



この関数が呼び出すメソッドです。インターフェイス メソッドとして記述でき、入力パラメータによって渡され、ファイルが存在するかどうか、ファイルの最終変更時刻 + 期限切れ時刻が現在の時刻を超えているかどうか (それがより大きい場合は、有効期限が切れていないことを意味します)、ファイルが存在しないか、期限切れになっている場合は、元のデータを再ロードします。ここでは、簡単にするために、特定のクラスからキャッシュ クラスを継承し、データベースからデータを取得できます。 2)

IV. 補足説明、結論

注 1: キャッシュ時間は自分で調整でき、配列、XML、キャッシュなどの読み取り時間条件に応じて調整できます。キャッシュ時間 (つまり、キャッシュ キー) もキャッシュによって制御されることに言及しました。これは CMS システムで広く使用されており、更新されたキーはキャッシュに配置されるため、戦闘全体を非常に簡単に制御できます。注 2: PHP5 はクラス継承のサポートを開始します。これは興味深いことです。構成されたクラスで Web サイトの残りのグローバル部分を記述し、データ層クラス (MySQL と対話するクラスなど)、つまりキャッシュ クラスと対話するように記述します。データ対話クラスを継承し、データベースを非常に簡単に読み取ることができます。これは外国語なので、ここでは詳しく説明しません。

このクラス ファイルは php5 以降用であることに注意してください。他のバージョンのクラスを使用しないでください。



http://www.bkjia.com/PHPjc/317388.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/317388.html

技術記事

1. 近年登場した Web デザイン スクリプト言語である PHP の紹介。PHP は、そのパワーと拡張性により、従来の ASP Web サイトと比較して、近年大幅な進歩を遂げています。




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