ホームページ >バックエンド開発 >PHPチュートリアル >PHPの9つの主要なキャッシュ技術の概要を解説
1. フルページ静的キャッシュ
とは、ユーザーがアクセスすると、PHP サーバーの解析プロセスを経ずに、すべてのページが HTML 静的ページとして生成されることを意味します。この方法は、dedecms などの CMS システムでより一般的です。
より一般的に使用される実装方法は、出力キャッシュを使用することです。変更部分は静的にキャッシュされますが、頻繁に変更されるブロックはキャッシュされず、最終的にまとめられて表示されます。これは、ob_get_contents と同様のメソッドを使用して実装することも、ESI などのページ フラグメント キャッシュ戦略を使用して動的にキャッシュすることもできます。ページ内の比較的静的なフラグメント
Web Web サイトのコンテンツは常に更新され、変更されますが、これは、この Web サイトのコンテンツが動的コンテンツであることを意味するわけではありません。実際、動的コンテンツは、Web サイトのコンテンツを毎回参照します。ユーザーが同じリンクをクリックしたときに取得されるコンテンツは、一般的な ASP や JSP などの Web サーバー アプリケーションによって生成されます。これに対して、静的コンテンツは一般にテキスト、画像、マルチメディアで構成され、ユーザーがクリックするたびに生成されます。対応するリンクは基本的に変更されません。動的コンテンツ キャッシュを解決する最新のテクノロジーは、ESI テクノロジーを通じて Web サイトのコンテンツをデザインすることです。
ESI テクノロジーの仕組み動的に生成されたコンテンツはユーザーにリッチでエキサイティングなページを提供し、Web サイト開発者は関連コンテンツをより簡単かつ柔軟に制御することもできますが、これらの利便性を享受する前に、同時に、また、Web サイトのデータベースとアプリケーション サーバーの処理負荷も増加します。 Web サイトへのアクセス数が増えると、ハードウェアとデータベースへの投資が膨大になりますが、それでもページに重大な遅延が発生したり、アクセス障害が発生したりする可能性があります。
ユーザーが動的に生成されたコンテンツへのアクセスが遅い根本的な理由は、動的に生成されたコンテンツが複雑なプロセスを経る必要があるためです。まず、ユーザーのリクエストは、ユーザーのリクエストに従ってアプリケーションサーバーの対応するソフトウェアモジュールに割り当てられます。ソフトウェアモジュール どのような種類のデータをデータベースから抽出してユーザーに提供する必要があるかを計算によって決定し、対応するデータをデータベースから抽出して、定義された形式でユーザーに渡します。これらの長いプロセスにより、ユーザーのアクセスが遅くなり、サーバーの負荷が増加します。実際の環境では、動的に生成されたページには、ページの適時性を確保するために、頻繁に変更されるコンテンツやパーソナライズされたコンテンツが少量しか含まれない場合があります。動的コンテンツにより、ページ全体がキャッシュされなくなります。 ESI (エッジ サイド インクルード) は、単純なマークアップ言語を使用して、高速化できる Web ページと高速化できない Web ページ内のコンテンツ フラグメントを記述します。各 Web ページは、さまざまな小さな部分に分割され、さまざまなキャッシュ制御戦略が割り当てられます。サーバーは、完全な Web ページをユーザーに送信する前に、さまざまな小さな部分を動的に組み合わせることができます。この制御により、サーバーからページ全体をクロールする回数が効果的に削減され、元のサーバーからはキャッシュできない少数のフラグメントのみが抽出されるため、元のサーバーの負荷が効果的に軽減されます。が短縮され、ユーザーアクセスの応答時間が改善されます。
ESI は、開発者がコンテンツのフラグメントをマークして、対応するキャッシュ サーバーを介したキャッシュを高速化するために使用できるシンプルなマークアップ言語です。同時に、ESI は一連のコンテンツ検証標準も定義します。これにより、元のサーバーによるキャッシュ サーバー内のキャッシュされたコンテンツの管理が実現され、Web サイトのコンテンツ制御能力が向上します。 CDN ネットワークは、全国に分散されたノードに ESI をサポートするキャッシュ サーバーをインストールすることにより、Web サイトの動的コンテンツに対する CDN サービスを提供することもできます。
このメソッドは、たとえばモールの商品ページで使用できます。
名前が示すように、これは、たとえば、特定の商品情報をキャッシュする方法です。モールへのリクエスト時には、店舗情報や商品情報などのデータを取得します。この際、ファイル名に商品IDを含めてキャッシュすることができます。固有の識別子を作成します。次に誰かがこの製品を表示したいときは、まずデータベースにクエリせずにこのファイル内の情報を直接調整します。実際には、キャッシュ ファイルにキャッシュされているのは php 配列です。 このメソッドは Ecmall モール システムで使用されます
4.其实这跟数据缓存是一个思路,就是根据查询语句来缓存;将查询得到的数据缓存在一个文件中,下次遇到相同的查询时,就直接先从这个文件里面调数据,不会再去查数据库;但此处的缓存文件名可能就需要以查询语句为基点来建立唯一标示;
按时间变更进行缓存
其实,这一条不是真正的缓存方式;上面的2、3、4的缓存技术一般都用到了时间变更判断;就是对于缓存文件您需要设一个有效时间,在这个有效时间 内,相同的访问才会先取缓存文件的内容,但是超过设定的缓存时间,就需要重新从数据库中获取数据,并生产最新的缓存文件;比如,我将我们商城的首页就是设 置2个小时更新一次;
5、按内容变更进行缓存
这个也并非独立的缓存技术,需结合着用;就是当数据库内容被修改时,即刻更新缓存文件;
比如,一个人流量很大的商城,商品很多,商品表必然比较大,这表的压力也比较重;我们就可以对商品显示页进行页面缓存;
当商家在后台修改这个商品的信息时,点击保存,我们同时就更新缓存文件;那么,买家访问这个商品信息时,实际上访问的是一个静态页面,而不需要再去访问数据库;
试想,如果对商品页不缓存,那么每次访问一个商品就要去数据库查一次,如果有10万人在线浏览商品,那服务器压力就大了;
6、内存式缓存
提到这个,可能大家想到的首先就是Memcached;memcached是高性能的分布式内存缓存服务器。 一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、 提高可扩展性。
它就是将需要缓存的信息,缓存到系统内存中,需要获取信息时,直接到内存中取;比较常用的方式就是 key–>value方式;
<?php $memcachehost = '192.168.6.191'; $memcacheport = 11211; $memcachelife = 60; $memcache = new Memcache; $memcache->connect($memcachehost,$memcacheport) or die ("Could not connect"); $memcache->set('key','缓存的内容'); $get = $memcache->get($key); //获取信息 ?>
7、apache缓存模块
apache安装完以后,是不允许被cache的。如果外接了cache或squid服务器要求进行web加速的话,就需要在htttpd.conf里进行设置,当然前提是在安装apache的时候要激活mod_cache的模块。
安装apache时:./configure –enable-cache –enable-disk-cache –enable-mem-cache
8、php APC缓存扩展
Php有一个APC缓存扩展,windows下面为php_apc.dll,需要先加载这个模块,然后是在php.ini里面进行配置:
[apc] extension=php_apc.dll apc.rfc1867 = on upload_max_filesize = 100M post_max_size = 100M apc.max_file_size = 200M upload_max_filesize = 1000M post_max_size = 1000M max_execution_time = 600 ; 每个PHP页面运行的最大时间值(秒),默认30秒 max_input_time = 600 ; 每个PHP页面接收数据所需的最大时间,默认60 memory_limit = 128M ; 每个PHP页面所吃掉的最大内存,默认8M
9、Opcode缓存
我们知道,php的执行流程可以用下图来展示:
首先php代码被解析为Tokens,然后再编译为Opcode码,最后执行Opcode码,返回结果;所以,对于相同的php文件,第一次运行时 可以缓存其Opcode码,下次再执行这个页面时,直接会去找到缓存下的opcode码,直接执行最后一步,而不再需要中间的步骤了。
比较知名的是XCache、Turck MM Cache、PHP Accelerator等。
以上がPHPの9つの主要なキャッシュ技術の概要を解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。