ホームページ  >  記事  >  php教程  >  キャッシュテクノロジの詳細な説明—php

キャッシュテクノロジの詳細な説明—php

黄舟
黄舟オリジナル
2016-12-14 11:43:041138ブラウズ

1. はじめに

PHP は、近年登場した Web デザイン スクリプト言語であり、そのパワーとスケーラビリティにより、従来の ASP Web サイトと比較して高速です。利点として、mssql から php に 60,000 個のデータを転送する場合、40 秒かかりますが、ASP では 2 分以上かかります。ただし、Web サイトのデータはますます増えているため、データをより速く呼び出すことが望まれます。毎回データベースから削除する必要があるため、ファイルや特定のメモリアドレスなどから取得できます。これが PHP のキャッシュ技術です。

2.

一般的に、キャッシュの目的は、アクセスを高速化するためにデータを保存することです。メモリが最も高速であることは間違いありませんが、何百Mものデータをそこに保存できるでしょうか? もちろん、これは非現実的です。 ob_start( など) のようなサーバー キャッシュに一時的に保存される場合があります。このキャッシュ ページがオンになっている場合、ページ出力が自動的にクリアされるか、ページが返されるまで、ページ コンテンツはファイル ヘッダーを送信する前にメモリにキャッシュされます。 ob_get_contents、または ob_end_clean 表示によってクリアされます。これは、静的ページの生成に非常に適していますが、これは一時的なものであり、問​​題を解決する良い方法ではありません。
さらに、ASP には共通パラメータを保存できるオブジェクト アプリケーションがありますが、これも PHP では、そのようなオブジェクトを作成する開発者を見たことがありません。実際、ページ キャッシュ テクノロジは必要ありません。 asp.net はビューステートを使用し、キャッシュはファイル関連付け (必ずしも正確であるとは限りません)、ファイルは変更され、キャッシュは更新されますが、ファイルは変更されず、タイムアウトしません (注 1)。キャッシュを読み取って、結果、これがアイデアです。このソース コードを見てください:


PHP:[クリップボードにコピー]
class cache{
/*
クラス名: キャッシュ
説明: データをキャッシュするコントロール、 $cache_out_time はキャッシュの日付タイムアウトを保存する配列です。
バージョン: 1.0
作者: old farmer cjjer
最終更新日:2006 -2-26
作者 URL: http://www.cjjer.com
*/
private $ ache_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 'キャッシュクラスバイ。';
}

function get_url() {
if (!isset($ _SERVER['REQUEST_URI'])) {
$url = $_SERVER[' REQUEST_URI'];
}else{
$url = $_SERVER['SCRIPT_NAME']; '?' : '';
}

return $url;
}

function warn($errorstring){
echo "エラーが発生しました:

"。 $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){
if(!file_exists($cacheFile)){
$this->warn( 'キャッシュ ファイルを読み取れません。');//trigger_error
return false;
echo 'キャッシュ ファイルを読み取ります:'.$cacheFile;
//return unserialize(file_get_contents($cacheFile));
$fso = fopen ($cacheFile, 'r'); ($cacheFile));
fclose($fso);
return $data;
}

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); {
$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;


}
?>

3. このキャッシュ クラスを 1 行ずつ説明します。読み続けてください) 名前はキャッシュであり、2 つの属性があります:


CODE:[クリップボードにコピー]private $cache_dir;
$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('キャッシュ ファイルが存在しないため、手動で作成する必要があります。');
}
$this->cache_dir = $cache_dirname;



クラスの初回インスタンス時にパラメータキャッシュを使用してデフォルト関数を構築する ファイル名が存在しない場合は、編集してフォルダーを作成します。作成に失敗した場合は、キャッシュ クラスの $cache_dir 属性をこのファイルに設定します。


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



これは、デモンストレーションのために、キャッシュ リソースが正常に解放されたことを示す文字列を出力します。 :[クリップボードにコピー]
function warn($errorstring){
echo " エラーが発生しました:< pre>".$errorstring." ";
}



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


PHP:[クリップボードにコピー]
function get_url () {
if (!isset($_SERVER[ 'REQUEST_URI'])) {
$url = $_SERVER['REQUEST_URI'];
}else{
$url = $_SERVER['SCRIPT_NAME']
$url .= (!empty($_SERVER['QUERY_STRING') ])) ?' . $_SERVER['QUERY_STRING'] : '';
}

return $url; これは海外で多くの人が見た情報です各国は主に x.php?page=1、x.php?page=2 などのファイルをキャッシュします。


PHP:[Copy] クラスの関数です。クリップボードへ]
functioncache_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);
return true;



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

バイトストリームに書き込み、他の形式に書き込むにはシリアル化
ちなみに、配列を作成したい場合は、(結果を除くクエリをMySQLデータベースから選択できます)は次のように記述されます。


PHP:[クリップボードにコピー]
function display_cache($cacheFile){
if(!file_exists($cacheFile)){
$ this->warn( 'キャッシュ ファイルを読み取れません。');//trigger_error
return false;
echo 'キャッシュ ファイルを読み込む:'.$cacheFile;
//return unserialize(file_get_contents($cacheFile)) ; $cacheFile, 'r');
$data = fread($fso, filesize($fso));
return $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);
}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;
}



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

4. 補足説明と結論

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

特別な注意として、このクラス ファイルは php5 以降のバージョン用です。他のバージョンのクラスは使用しないでください。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。

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