PHP Webページキャッシュテクノロジーの利点とコード例の詳細な説明

coldplay.xixi
リリース: 2023-04-09 12:12:01
転載
2435 人が閲覧しました

PHP Webページキャッシュテクノロジーの利点とコード例の詳細な説明

#静的フロントエンド: 動的ページを解析し、静的ページとして保存します

ファイル キャッシュ: クエリ結果をファイル (XML) として保存します

メモリ キャッシュ :memcache

php キャッシュ:画像、ビデオ、ファイル、データベース検索結果など、さまざまな形式のデータを保存するために使用できます。簡単に言うと、データがメモリに呼び出されてからメモリから読み取られるため、読み取り速度が大幅に向上します。 Memcache は danga のプロジェクトです。最初に LiveJournal によって提供されました。元々は LiveJournal へのアクセスを高速化するために開発され、その後多くの大規模 Web サイトで採用されました。 Memcached は 1 つ以上のサーバーでデーモンとして実行され、いつでもクライアントの接続と操作を受け取ります。

XCache は、オープン ソースのオペコード キャッシュ/オプティマイザーであり、サーバー上の PHP のパフォーマンスを向上させることができます。コンパイルされた PHP データを共有メモリにバッファリングすることで、繰り返しのコンパイル プロセスを回避します。バッファリングされたコンパイル済みデータを直接使用する機能速度を上げるためのコード。通常、ページの生成速度が 2 ~ 5 倍向上し、サーバーの負荷が軽減されます。

************** ********* ****************************************** ******** ******************************************* ******* ******************************

1. ユニバーサル キャッシュ テクノロジー :

データ キャッシュ: ここでいうデータ キャッシュとは、データベース クエリの PHP キャッシュ メカニズムを指します。ページにアクセスするたびに、まず対応するキャッシュ データが存在するかどうかを検出します。存在しない場合は、接続してデータベースがデータを取得します。クエリ結果をシリアル化し、ファイルに保存します。将来的には、同じクエリ結果がキャッシュ テーブルまたはファイルから直接取得されます。

最も広く使用されている例は、結果 ID をテーブルにキャッシュし、次回同じキーワードを検索するときに最初にキャッシュ テーブルを検索する Discuz の検索機能です。

一般的な方法として、複数のテーブルを関連付ける場合、添付されたテーブルの内容を配列として生成し、メインテーブルのフィールドに保存し、必要に応じて配列を分解します。読み取りできるのは 1 つのテーブルのみであることです。欠点は、2 つのデータを同期するためにさらに多くの手順が必要になることです。データベースが常にボトルネックになります。速度のためにハードディスクを犠牲にすることがこの点の重要なポイントです。

2. ページ キャッシュ:

ページにアクセスするたびに、まず対応するキャッシュされたページ ファイルが存在するかどうかを検出します。存在しない場合は、次のページに接続します。データベースを取得してデータを取得し、ページを表示すると同時にキャッシュページファイルを生成します。これにより、ページファイルは次回訪問時に有効になります。 (インターネット上のテンプレート エンジンと一部の一般的な PHP キャッシュ メカニズム クラスには通常、この機能があります)

3. 時間トリガー キャッシュ:

ファイルが存在するかどうかを確認し、タイムスタンプが有効期限の設定より小さい場合、ファイル変更タイムスタンプが現在のタイムスタンプから有効期限タイムスタンプを引いた値より大きい場合はキャッシュを使用し、それ以外の場合はキャッシュを更新します。

4. コンテンツトリガーのキャッシュ:

データが挿入または更新されると、PHP キャッシュ メカニズムが強制的に更新されます。

5. 静的キャッシュ:

ここでいう静的キャッシュとは、HTML や XML などのテキスト ファイルを直接生成し、更新があった場合に再生成する静的なキャッシュを指します。 . 、あまり変更のないページに適しているため、ここでは説明しません。

上記の内容はコード レベルのソリューションです。私は他のフレームワークを直接 CP していますが、変更するのが面倒です。内容は似ており、簡単に実行でき、さまざまな方法で使用できますが、次のコンテンツはサーバー向けです。エンドエンド キャッシュ ソリューション、非コード レベルでは、

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 サイトがこれを行っていることは知っています。簡単に言うと、これはマルチサーバーです。同じページまたはファイルが異なるサーバーにキャッシュされ、関連するページが自動的に解析されます。北と南に従って、サーバー内で。

PHP Web ページのキャッシュの例

  • ob_start():页面缓存开始的标志,此函数一下的内容直至ob_end_flush()或者ob_end_clean()都保存在页面缓存中;
  • ob_get_contents():用来获取页面缓存中的内容,获取到以后呢,我们就可以想怎么处理这些内容都行了,过滤字段啦,匹配内容啦,都可以~~~ :)
  • ob_end_flush():表示页面缓存结束。并且经我验证,缓存的内容将输出到当前页面上,也就是可以显示缓存内容。

用此三个php函数,就可以实现强大的功能。如果数据库查询量较大,可以用cache来解决这个问题。

首先,设定过期时间,如果要求缓存文件2个小时过期,就可以设定cache_time为3600*2;通过filectime()来获取缓存文件的创建时间(或 filemtime()获取修改时间),如果当前时间跟文件的创建时间超过限定的过期时间,就可以通过上面三个函数,首先从数据库中取出数据,然后开始缓存ob_start(),然后把要生成的页面的html代码写在缓存中,缓存结束后通过ob_get_contents()获取到缓存的内容,然后通过fwrite把缓存内容写到静态页面html。

如果未过期,直接读取cache中的静态页面即可,避免了大量的数据库访问。

<?php
$_time =10;
$dir="D:\\php\\";
 
function cache_start($_time, $dir)
{
 $cachefile = $dir.&#39;/&#39;.sha1($_SERVER[&#39;REQUEST_URI&#39;]).&#39;.html&#39;;
 $cachetime = $_time;
 ob_start();
 if(file_exists($cachefile) && (time()-filemtime($cachefile) < $cachetime))
 {
  include($cachefile);
  ob_end_flush();
  exit;
 }
}
 
function cache_end($dir)
{
 $cachefile = $dir.&#39;/&#39;.sha1($_SERVER[&#39;REQUEST_URI&#39;]).&#39;.html&#39;;
 $fp = fopen($cachefile, &#39;w&#39;);
 fwrite($fp, ob_get_contents());
 fclose($fp);
 ob_end_flush();
}
 
cache_start($_time, $dir);
//以下是输出的内容,放在cache_start和cache_end两个方法之间
for ($i=0;$i<5;$i++)
{
 echo $i;
 sleep(1);
}
cache_end($dir);
?>
ログイン後にコピー

相关学习推荐:PHP编程从入门到精通

以上がPHP Webページキャッシュテクノロジーの利点とコード例の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:jb51.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!