非常に同時のPHPアプリケーションでは、キャッシュの合理的な使用は、パフォーマンスを改善し、データベースの圧力を軽減するための重要な手段です。 APCU(代替PHPキャッシュユーザー)は、スタンドアロン環境での高速データアクセスに適した軽量ローカルキャッシュソリューションです。 APCU_Entry関数は、APCUの非常に実用的で高度なインターフェイスです。 「存在しない場合は、キャッシュ、書き込み、返品を読む」をエレガントに実装できます。この記事では、 APCU_ENTRYを使用してキャッシュを管理し、アプリケーションのパフォーマンスを改善し、実用的な例コードを添付する方法を詳細に紹介します。
APCU_ENTRYは、PHP 5.5以上のAPCU拡張によって提供される関数です。その基本的な使用法は次のとおりです。
mixed apcu_entry(string $key, callable $generator [, int $ttl = 0 ])
パラメーター説明:
$キー:キャッシュされたキー名。
$ generator :このキーがキャッシュに存在しないときに実行されるコールバック関数、その返品値はキャッシュに保存されて返されます。
$ TTL :キャッシュされたサバイバル時間(秒)、デフォルトは永続的な平均を意味する0です。
このパターンは、 Cache Stampede Protectionと呼ばれ、複数のプロセスがキャッシュ障害を同時に発見し、基礎となるデータソースを要求するのを防ぎます。
典型的なシナリオを想像してください。ウェブサイトのホームページは、ホットセラー製品のリストを表示する必要があります。データのこの部分はデータベースから照会されています。リクエストごとにライブラリを直接確認すると、明らかに不必要なパフォーマンス損失が発生します。 APCU_Entryを使用して、このデータを優雅にキャッシュできます。
$hotProducts = apcu_entry('hot_products', function() {
// データベースからホットセラー製品の読書リストをシミュレートします
return getHotProductsFromDatabase();
}, 300); // キャッシュ 5 分
このようにして、キャッシュが存在すると、キャッシュデータが直接返されます。それ以外の場合は、データベースのデータを読み取り、キャッシュに書き込むコールバックが実行されます。
実際のビジネスでは、キャッシュされたコンテンツは静的ではありません。たとえば、新製品がホットセラーリストに追加されたり、製品のステータスが変更されたりする場合、関連するキャッシュをクリーニングする必要があります。
APCU_DELETE()を積極的に呼び出すことにより、指定されたキャッシュを削除できます。
apcu_delete('hot_products');
次回にアクセスするとき、 APCU_ENTRYは発電機関数を呼び出してキャッシュを更新します。この方法は、従来のAPCU_FETCH + APCU_STOREよりも明確でアトミックであり、「チェックリセット」レース状態の問題を回避します。
以下は、URLを組み合わせたアプリケーションの例です。リモートインターフェイス( https://gitbox.net/api/user/123など)からユーザー情報を取得することをシミュレートし、キャッシュします。
function getUserInfo($userId) {
$cacheKey = "user_info_$userId";
return apcu_entry($cacheKey, function() use ($userId) {
// シミュレートして、リモートインターフェイスからデータを取得します
$url = "https://gitbox.net/api/user/$userId";
$json = file_get_contents($url);
return json_decode($json, true);
}, 600); // キャッシュ 10 分
}
$user = getUserInfo(123);
インターフェイスデータが変更された場合、次のように呼び出すことができます。
apcu_delete("user_info_123");
特定のユーザーの情報キャッシュをクリアする。
従来のキャッシュの習得と記述ロジックと比較してください。
if (!apcu_exists($key)) {
$value = expensiveOperation();
apcu_store($key, $value);
} else {
$value = apcu_fetch($key);
}
APCU_Entryを使用すると、コードの複雑さが大幅に減少すると同時に、より良い原子性と並行性パフォーマンスもあります。これは、交通量の多い環境で特に重要です。
APCU_Entryは、APCUで非常に強力で使いやすい機能です。データ生成、キャッシュライティング、キャッシュの読み取りを統合し、従来のキャッシュロジックに冗長性と競争上の問題を回避します。 APCU_DELETEと組み合わせることで、キャッシュを管理および優雅に洗浄できるため、PHPアプリケーションがより効率的で安定しています。 APCU_Entryを適切に使用することにより、より高速なレスポンシブでロードされたWebシステムを簡単に構築できます。