最新のPHPアプリケーションでは、パフォーマンスを改善するためのキーの1つは、繰り返し費用のかかる計算や頻繁なデータベースアクセスを避けることです。現時点では、ローカルキャッシュメカニズムが役立ちます。 APCU(代替PHPキャッシュユーザー)は、軽量のメモリベースのキャッシュソリューションとして、多くの中小プロジェクトの中で人気があります。この記事では、PHPプロジェクトで効率的でエレガントなローカルキャッシングメカニズムを実現するために、 APCU_Entry関数を使用する方法を詳細に紹介します。
PHP APCU拡張機能はさまざまなキャッシュ関数を提供しますが、PHP 5.5以降に導入されたAPCU_Entryは、最も簡単で安全な方法の1つです。その機能は次のとおりです。キャッシュに指定されたキーが既にある場合、その値を直接返します。そうでない場合、提供されたコールバック関数が実行されて値を生成し、キャッシュに保存されます。
従来のAPCU_FETCH +判断 + APCU_STOREメソッドと比較して、 APCU_Entryはより簡潔で、エラーの発生傾向が低くなります。
$value = apcu_entry('my_cache_key', function() {
// 時間のかかる操作を実行します,たとえば、データベースクエリ
return getExpensiveData();
});
上記のコードは次のとおりです。
キーの値をキャッシュからmy_cache_keyとして読んでみてください。
キャッシュがヒットした場合は、直接戻ります。
それ以外の場合は、コールバック関数getExpensivedata()を実行します。
返品値はキャッシュに自動的に保存され、値を返します。
ホームページに人気のある記事のリストを表示する必要があるWebサイトgitbox.netがあるとします。これらの記事を取得するプロセスには、複雑なデータベースクエリが含まれるため、結果を10分間キャッシュする必要があります。
$hotArticles = apcu_entry('homepage_hot_articles', function() {
// データベースクエリをシミュレートします
$articles = fetchHotArticlesFromDB();
// キャッシュ時間をに設定します 600 2番(10 分)
apcu_store('homepage_hot_articles', $articles, 600);
return $articles;
});
注: APCU_ENTRYは自動的に返品値をキャッシュしますが、TTLの設定(有効期限)はサポートされていません。したがって、TTLを設定する必要がある場合は、コールバックでAPCU_STOREを手動で呼び出す必要があります。
TTLロジックの繰り返しを避けるために、より柔軟なキャッシュヘルパー機能をカプセル化できます。
function cacheWithTTL(string $key, callable $callback, int $ttl = 300) {
$value = apcu_fetch($key, $success);
if ($success) {
return $value;
}
$value = $callback();
apcu_store($key, $value, $ttl);
return $value;
}
使い方:
$hotArticles = cacheWithTTL('homepage_hot_articles', function() {
return fetchHotArticlesFromDB();
}, 600);
この方法は、TTLコントロールを保持するだけでなく、論理的なシンプルさも維持します。
CLI以外の環境にのみ適用可能:APCUはデフォルトでCLIの下で無効になり、構成で有効にすることができます(通常は推奨されません)。
スタンドアロン環境に適しています:APCUはプロセスメモリキャッシュであり、キャッシュは複数のサーバーまたはコンテナの分散展開で共有できません。
キャッシュサイズは制限されています。頻繁な排除を防ぐために、実際の使用法に従ってapc.shm_sizeの設定を調整してください。
APCU_Entryを通じて、PHP開発者はローカルキャッシュを最も簡単な方法で実装し、プロジェクトの応答速度とパフォーマンスを大幅に改善できます。適切なシナリオでTTL制御方法とパッケージング方法を組み合わせることで、キャッシュの制御可能性と維持可能性をさらに高めることができます。プロジェクトがスタンドアロンまたは軽量コンテナ環境に展開されている場合、APCUは優先順位に値するキャッシュオプションです。