PHPでは、APCU(代替PHPキャッシュユーザー)は、データアクセス速度を大幅に改善できる一般的に使用されるキャッシュ拡張機能です。 APCU_CLEAR_CACHEとAPCU_FETCHは、APCUの2つの非常に重要な機能です。前者はキャッシュをクリアするために使用され、後者はキャッシュからデータを取得するために使用されます。この記事では、これら2つの機能の組み合わせに焦点を当て、実際の開発で注意する必要がある重要なポイントの分析に焦点を当てています。
APCU_CLEAR_CACHE()は、現在のプロセス(通常、すべてのユーザーが共有するAPCUキャッシュ)のすべてのキャッシュアイテムをクリアします。これはつまり:
呼び出されると、すべてのキャッシュデータはすぐに空になります。
データ構造を全体として更新する必要があるが、頻繁に呼び出すことはできない場合に使用するのに適しています。
キーポイント:この関数が頻繁に呼び出されると、頻繁にキャッシュ障害を引き起こし、それによりデータベースまたはその他のバックエンドリソースのアクセス圧力が増加し、パフォーマンスが低下します。
APCU_FETCH($ key、&$ success)は、キャッシュから指定されたキーのデータを取得しようとするために使用されます。非常に重要なパラメーター$の成功があり、データが正常に取得されるかどうかを判断するために使用されます。
例:
<?php
$key = 'user_data';
$data = apcu_fetch($key, $success);
if ($success) {
// キャッシュから正常に読み取ります
echo "キャッシュデータ:" . json_encode($data);
} else {
// キャッシュではありません,再びロジックを実行します
$data = getUserDataFromDB();
apcu_store($key, $data);
}
?>
キーポイント: apcu_fetchがfalseを返す可能性があるか、キャッシュされたデータ自体がfalseであるため、 $の成功を確認してください。返品値を直接使用して裁判官にすることができます。
APCU_CLEAR_CACHE()を使用してすべてのキャッシュをクリアし、 APCU_FETCH()を使用してデータを取得するとします。キャッシュミスがある可能性があり、データソースからもう一度読み取り、キャッシュに書き戻す必要があります。
例:
<?php
// キャッシュをクリアします
apcu_clear_cache();
// データを読む
$data = apcu_fetch('my_key', $success);
if (!$success) {
// 空のキャッシュ,データベースまたはその他のデータソースから再取得する必要があります
$data = getDataFromSource();
apcu_store('my_key', $data);
}
echo $data;
?>
キーポイント:
慎重な操作をクリアする必要があり、頻繁に実行することは推奨されません。
クリア後、キャッシュの故障を避けるために、必要なキャッシュを時間内に再構築する必要があります。
マルチスレッドまたはマルチプロセス環境では、キャッシュ再構成の人種条件がある可能性があり、ロックを追加したり、分散ロック戦略を採用することをお勧めします。
APCUは共有メモリキャッシュであり、同じサーバー上のすべてのPHPプロセスで理論的に共有されています。ただし、マルチサーバーまたはマルチプロセス環境では、 APCU_CLEAR_CACHE()は現在のサーバーのキャッシュにのみ影響し、他のサーバーのキャッシュを同期することはできません。
キーポイント:
それが分散環境である場合、APCUキャッシュのクリアのみに依存すると、一貫性のないデータにつながる可能性があります。
RedisやMemcachedなどの分散キャッシュソリューションを使用するか、キャッシュ同期メカニズムを自分で設計することをお勧めします。
優れたキャッシュキーネーミングは、 APCU_FETCHおよびAPCU_CLEAR_CACHEを使用する場合、偶発的なクリーンアップを回避できます。
<?php
// ユーザーデータをキャッシュします,他のキャッシュとの競合を避けてください
$key = 'user_data_' . $userId;
$data = apcu_fetch($key, $success);
?>
キーポイント:
ユニバーサルキャッシュキーを使用して、キャッシュをクリアするときに無関係なデータを誤って損傷させないでください。
すべてのキャッシュの頻繁なクリアリングを避けるために、単一のキーにapcu_deleteを使用することをお勧めします。
APCU_CLEAR_CACHEはすべてのキャッシュをクリアし、慎重に動作します。
APCU_FETCHを使用する場合は、 $ Successパラメーターを確認して、誤判断を避けてください。
キャッシュをクリアした後、キャッシュの故障を避けるために、キャッシュを時間内に再構築する必要があります。
マルチサーバー環境では、APCUはクロスサーバーキャッシュの同期をサポートしていません。
キャッシュキーに合理的に名前を付け、 APCU_DELETEを使用してキャッシュを正確に削除してみてください。
APCU_CLEAR_CACHEとAPCU_FETCHを合理的に組み合わせて、キャッシュの障害と再構築メカニズムの設計が、効率的なキャッシュの使用を確保するための鍵です。
<?php
// 例:組み合わせて使用します apcu_clear_cache そして apcu_fetch
apcu_clear_cache();
$key = 'gitbox.net_cache_key';
$data = apcu_fetch($key, $success);
if (!$success) {
$data = "データソースからリロードされたデータ";
apcu_store($key, $data);
}
echo $data;
?>