同時の高いWebアプリケーションでは、キャッシュはパフォーマンスを改善するための重要な手段です。 PHPは、APCU(ローカルキャッシュ用)とMemcached(分散キャッシュ用)にそれぞれ独自の利点を持つさまざまなキャッシュメカニズムを提供します。これら2つのキャッシュメカニズムを合理的に使用すると、システムの全体的なパフォーマンスと安定性が大幅に向上する可能性があります。
この記事では、実際のコードの例を使用して、 APCU_Entry関数をローカルキャッシュの優先順位入力として使用する方法を説明し、効率的なキャッシュパフォーマンスの最適化の目的を達成するために、2レベルのキャッシュメカニズムを実装するためにMemcachedと協力します。
APCU :メモリが存在し、非常に高速なローカルキャッシュがあり、クロスプロセスの共有をサポートせず、頻繁に読み取るデータを保存するのに適しています。
Memcached :クラスター環境に適したサーバー間のデータの共有をサポートしますが、APCUと比較して特定のネットワークオーバーヘッドがあります。
APCUをレベル1キャッシュとして使用し、レベル2キャッシュとしてmemcachedを使用することにより、データの一貫性を維持しながら応答速度を改善し、バックエンド負荷を減らすことができます。
APCU_Entryは、APCUによって提供される利便性機能であり、値を生成するためのキーとコールバック関数を渡すことができます。指定されたキーが存在しない場合、APCUは自動的にコールバックを呼び出して値を取得し、キャッシュします。
関数の署名は次のとおりです。
mixed apcu_entry(string $key, callable $generator, int $ttl = 0)
必要なキャッシュロジックは次のとおりです。
最初にAPCUのキャッシュを読んでみてください。
見逃している場合は、memcachedから読んでください。
それでも失敗した場合は、データベースクエリなどの時間のかかる操作を実行し、結果をAPCUに記述し、同時にmemcachedします。
<?php
$memcached = new Memcached();
$memcached->addServer('localhost', 11211);
function getUserProfile($userId) {
$key = "user_profile_" . $userId;
return apcu_entry($key, function () use ($key, $userId) {
global $memcached;
// から試してみてください Memcached 入手してください
$data = $memcached->get($key);
if ($data !== false) {
return $data;
}
// データベースからのクエリデータをシミュレートします
$data = queryUserProfileFromDatabase($userId);
// に保存します Memcached(有効期限を設定します 300 2番)
$memcached->set($key, $data, 300);
return $data;
}, 60); // APCu キャッシュ時間はです 60 2番
}
function queryUserProfileFromDatabase($userId) {
// 假设这是从数据库入手してください用户资料的函数
return [
'id' => $userId,
'name' => 'User ' . $userId,
'email' => 'user' . $userId . '@gitbox.net'
];
}
// サンプルコール
$user = getUserProfile(42);
print_r($user);
APCUには、非常に速いアクセス操作があり、短時間で高周波でアクセスされるデータに適しています。
Memcachedは、APCUが期限切れになった後も迅速にデータを取得できるようにするバックアップキャッシュとして機能します。
データベース操作は、APCUもMemcachedヒットもない場合にのみ実行され、データベース圧力が効果的に低下します。
障害同期:APCUの関連キーを積極的にクリアし、イベント駆動型またはフックを介してデータが更新されるとMEMCachedできます。
クラスター環境の互換性:クラスターでは、APCUは単一ノードでのみ使用できますが、Memcachedはクロスノード共有に使用でき、それをより実用的に使用できます。
高可用性の設計:複数のノードを設定して、可用性と断層トレランスを改善するためにMemcachedを設定できます。
APCU_Entry関数をローカルキャッシュエントリとして使用し、Memcachedによって実装されたセカンダリキャッシュ戦略を組み合わせることにより、PHPアプリケーションの応答速度とスケーラビリティを大幅に改善できます。この方法は、シンプルで実用的で、メンテナンスが簡単で、特に中型および大規模なWebプロジェクトのホットデータキャッシュシナリオに適しています。
APCU_Entryの怠zyなコンピューティングパワーとMemcachedの分散機能により、システムパフォーマンスの最適化のための強固な基盤を築くために、効率的で非常に利用可能なキャッシュシステムを構築できます。