ホームページ >バックエンド開発 >PHPチュートリアル >PHP でキャッシュを実装する方法と、パフォーマンスに最適なキャッシュ手法はどれですか?

PHP でキャッシュを実装する方法と、パフォーマンスに最適なキャッシュ手法はどれですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-28 22:11:15886ブラウズ

How to Implement Caching in PHP and Which Caching Techniques Are Best for Performance?

PHP でキャッシュを実装する方法と、どのキャッシュ手法を好みますか?

キャッシュは、パフォーマンスを向上させ、サーバーの負荷を軽減し、ユーザー エクスペリエンスを向上させるために、最新の Web アプリケーションにおいて不可欠な技術です。キャッシュは、すぐにアクセスできるようにデータを一時的に保存することで、冗長なデータベース クエリや高価な計算を防ぐのに役立ちます。 PHP には、特定の使用例に応じて実装できるさまざまなキャッシュ戦略とテクニックがあります。

この記事では、さまざまな種類のキャッシュ手法、PHP でのキャッシュの実装方法、使用する推奨のキャッシュ戦略について説明します。


1. PHP のキャッシュの種類

PHP アプリケーションで使用できるキャッシュ メカニズムには複数の種類があります。各タイプは特定の目的を果たし、アプリケーションのニーズに基づいて活用できます。

a.データ キャッシュ (オブジェクト キャッシュ)

この手法には、頻繁にアクセスされるデータ (データベース クエリ、API 応答、計算結果など) をキャッシュして、再取得や再計算を行わずに再利用できるようにすることが含まれます。

b.ページのキャッシュ

ページ キャッシュには、ページのレンダリングされた HTML 出力全体が保存され、リクエストごとに PHP スクリプトを実行することなく、ユーザーに直接提供できます。これは、コンテンツの多い静的ページに特に役立ちます。

c.オペコードのキャッシュ

オペコード キャッシュはコンパイルされた PHP バイトコードをメモリに保存するため、リクエストごとに PHP スクリプトを解析するオーバーヘッドが軽減されます。これは通常、PHP ランタイム レベルで行われます。

d.ファイルのキャッシュ

これには、キャッシュされたデータをサーバーのファイル システムに保存することが含まれます。ファイルはディスクから直接書き込まれ、読み取られます。これはメモリ内キャッシュよりも遅くなりますが、大規模なデータ セットや永続性が必要な場合に便利です。

え。 HTTP レスポンスのキャッシュ

HTTP キャッシュは、同じリソースに対する繰り返しのリクエストを避けるために、HTTP 応答をサーバーまたはクライアント レベルで保存します。これには、Cache-Control や ETag などのキャッシュ ヘッダーが含まれます。

f.データベースのキャッシュ

クエリ結果またはデータベース オブジェクトをキャッシュして、同じデータベース クエリの繰り返しを回避し、データベース サーバーの負荷を軽減します。


2. PHP のキャッシュ手法

PHP で最も一般的に使用されるキャッシュ手法のいくつかを実装する方法を見てみましょう。

a.ファイルベースのキャッシュ

データをキャッシュ ファイルに書き込み、データベースに再度クエリを実行する前にキャッシュ ファイルが存在し、最新であるかどうかを確認することで、ファイルベースのキャッシュを簡単に実装できます。

ファイルベースのキャッシュの例:

<?php
$cacheFile = 'cache/data_cache.txt';
$cacheTime = 3600; // 1 hour

// Check if the cache file exists and is still valid
if (file_exists($cacheFile) && (filemtime($cacheFile) + $cacheTime > time())) {
    // Cache is valid, use cached data
    $data = file_get_contents($cacheFile);
} else {
    // Cache is expired or doesn't exist, fetch fresh data
    $data = fetchDataFromDatabase(); // Example function to fetch data

    // Save the fetched data to the cache file
    file_put_contents($cacheFile, $data);
}

echo $data;
?>

この手法は、小規模なアプリケーションやデータが頻繁に変更されない場合に効果的です。ただし、メモリ内キャッシュ手法よりも遅いため、大規模なデータ セットの場合は注意して使用する必要があります。

b. Memcached または Redis によるメモリ内キャッシュ

キャッシュを高速化するには、MemcachedRedis などのツールを使用してメモリ内キャッシュを使用できます。これらのツールは、データをメモリに保存することで高性能のキャッシュ レイヤーを提供し、ファイル システムから取得するよりもはるかに高速に取得できるようにします。

キャッシュに Redis を使用する:
  1. Redis と PHP Redis 拡張機能をインストールします:

    • サーバーに Redis をインストールします。
    • PHP Redis 拡張機能 (pecl install redis) をインストールします。
  2. Redis キャッシュの例:

<?php
// Create a Redis instance
$redis = new Redis();
$redis->connect('127.0.0.1', 6379); // Connect to Redis server

$cacheKey = 'user_data';
$cacheTime = 3600; // Cache for 1 hour

// Check if the data is cached
$data = $redis->get($cacheKey);

if ($data === false) {
    // Data not in cache, fetch it from the database
    $data = fetchDataFromDatabase(); // Your function to fetch data

    // Cache the result for future requests
    $redis->setex($cacheKey, $cacheTime, $data);
}

echo $data;
?>

Redis と Memcached はどちらも非常に高速で、有効期限やキャッシュの無効化などの高度なキャッシュ機能をサポートしているため、パフォーマンスが重要な懸念事項であるアプリケーションにはこのアプローチを強くお勧めします。

c.データベースによるクエリ キャッシュ

特定のデータベース クエリが繰り返し実行されていることが判明した場合は、それらのクエリの結果をキャッシュできます。 MySQLPostgreSQL などのほとんどの最新のデータベースにはクエリ キャッシュ メカニズムが組み込まれていますが、PHP でクエリを手動でキャッシュすることもできます。

データベースクエリキャッシュの例:

<?php
$cacheKey = 'db_query_cache';
$cacheTime = 3600; // Cache for 1 hour

// Check if the result of the query is already cached
$queryResult = $redis->get($cacheKey);

if ($queryResult === false) {
    // Query not cached, fetch it from the database
    $queryResult = fetchDataFromDatabase(); // Your DB query here

    // Cache the query result
    $redis->setex($cacheKey, $cacheTime, serialize($queryResult));
} else {
    // Unserialize cached result
    $queryResult = unserialize($queryResult);
}

echo json_encode($queryResult);
?>

このアプローチでは、毎回データベースにクエリを実行するのではなく、結果が Redis などのキャッシュ システムに保存され、必要に応じてそこから取得されます。これにより、データベース クエリの数が大幅に削減され、パフォーマンスが向上します。

d. OPcache を使用したオペコード キャッシュ

OPcache は、PHP スクリプトのコンパイルされたバイトコードをメモリにキャッシュする組み込みの PHP 拡張機能です。コンパイルされたスクリプトをキャッシュすることで、OPcache はリクエストごとに PHP ファイルを解析する必要がなくなります。

OPcache を有効にするには:

  1. PHP 構成で OPcache を有効にする (php.ini):
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
  1. OPcache がアクティブであることを確認します:
<?php
if (function_exists('opcache_get_status')) {
    var_dump(opcache_get_status());
}
?>

OPcache は、PHP スクリプトのコンパイルをスキップし、キャッシュされたバイトコードを直接実行することで応答時間を改善するため、処理が重い PHP アプリケーションに特に役立ちます。


3.高度なキャッシュ技術

a. HTTP キャッシュ (ブラウザ キャッシュ)

Cache-Control、ETag、Last-Modified などの適切な HTTP ヘッダーを使用して、HTTP レベルでキャッシュを制御できます。これらのヘッダーは、ブラウザーと中間キャッシュにコンテンツをキャッシュする方法を指示します。

<?php
$cacheFile = 'cache/data_cache.txt';
$cacheTime = 3600; // 1 hour

// Check if the cache file exists and is still valid
if (file_exists($cacheFile) && (filemtime($cacheFile) + $cacheTime > time())) {
    // Cache is valid, use cached data
    $data = file_get_contents($cacheFile);
} else {
    // Cache is expired or doesn't exist, fetch fresh data
    $data = fetchDataFromDatabase(); // Example function to fetch data

    // Save the fetched data to the cache file
    file_put_contents($cacheFile, $data);
}

echo $data;
?>

これは、画像、CSS、JavaScript ファイルなどの静的リソースに特に役立ちます。

b.コンテンツ配信ネットワーク (CDN) キャッシュ

アプリケーションが静的コンテンツ (画像、ビデオなど) を提供する場合、キャッシュを CloudflareAWS CloudFront などの CDN にオフロードできます。これらのサービスは、世界中のエッジ ロケーションでコンテンツをキャッシュし、遅延を削減し、エンドユーザーの読み込み時間を短縮します。


4.キャッシュのベストプラクティス

  • キャッシュの有効期限: データが古くならないように、キャッシュされたデータには必ず有効期限を設定します。パフォーマンスを犠牲にすることなく、使用時間を可能な限り最小限に抑えます。
  • キャッシュの無効化: データの更新時にキャッシュの無効化戦略を使用します。これにより、必要に応じてキャッシュが確実に更新されます。
  • キャッシュ粒度: データの変更頻度と操作のコストに応じて、適切なレベル (オブジェクト キャッシュ、クエリ キャッシュ、ページ キャッシュなど) でデータをキャッシュします。
  • 過剰なキャッシュを避ける: キャッシュによってパフォーマンスは向上しますが、すべてを無差別にキャッシュするとメモリ使用量が多くなり、複雑さが増す可能性があります。メリットが得られるデータのみをキャッシュします。

5.結論

キャッシュは、PHP アプリケーションのパフォーマンスとスケーラビリティを向上させる強力なツールです。ニーズに応じて、ファイル キャッシュメモリ内キャッシュ (Redis または Memcached)クエリ キャッシュオペコードなどのさまざまなキャッシュ手法を選択できます。キャッシュ (OPcache)、および HTTPキャッシュ

ほとんどの最新の PHP アプリケーションでは、オブジェクトまたはデータのキャッシュに Redis を使用し、オペコードのキャッシュに OPcache を使用すると、パフォーマンスに優れた利点が得られます。データの変更頻度やパフォーマンスの重要性など、特定のユースケースを常に考慮して、アプリケーションに最適なキャッシュ戦略を決定してください。


以上がPHP でキャッシュを実装する方法と、パフォーマンスに最適なキャッシュ手法はどれですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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