APCU_CLEAR_CACHE()はすぐにAPCUキャッシュプール全体をクリアします。これは、すべてのキャッシュされたデータが無効であることを意味し、次のようになります。
キャッシュの内訳:多数のリクエストがキャッシュをバイパスし、データベースまたはその他のバックエンドサービスに直接アクセスし、高い負荷を引き起こします。
キャッシュ再構成ストーム:多数のリクエストが同時にキャッシュの再構築をトリガーし、短期間でサーバー圧力を急激に増加させます。
リソース廃棄物:クリア後、キャッシュスペースは空になり、データの書き換えプロセスはCPUとメモリを消費します。
したがって、この関数を頻繁に呼び出すと、キャッシュメカニズムがその効果を失い、悪影響をもたらします。
キャッシュ全体の頻繁な未分化のクリアリングを避けてください。キャッシュされたデータが完全に失敗しない限り、 APCU_CLEAR_CACHE()を呼び出さないようにしてください。
apcu_delete()を使用して特定のキャッシュキーを削除して、キャッシュ全体のクリアを避けます。例えば:
<Code> $ key = 'user_123_profile'; apcu_delete($ key); </code>これにより、期限切れまたは変更されたデータのみをクリーニングでき、他のキャッシュは有効なままです。
APCU_STORE()のTTLパラメーターを使用して、キャッシュの有効期限を設定すると、キャッシュが手動のクリーニングなしで自動的に無効になります。
<code> $ key = 'homepage_data'; $ data = fetchdatafromdb(); apcu_store($ key、$ data、300); // 300秒後に自動的に期限切れになります</code>キャッシュをクリアする代わりに、キャッシュバージョン番号または名前空間によるキャッシュ障害を制御します。例えば:
<code> $ version = apcu_fetch( 'cache_version'); if(!$ version){$ version = 1; apcu_store( 'cache_version'、$ version); } $ key = "user_profile _ {$ version} _123"; $ data = apcu_fetch($ key); if(!$ data){$ data = fetchuserprofile(123); apcu_store($ key、$ data); } //キャッシュをクリーニングする必要がある場合は、バージョン番号を増やすだけです:apcu_store( 'cache_version'、$ version + 1); </code>この方法は、APCU_CLEAR_CACHE()を呼び出すことなく、古いキャッシュをバッチに失敗させる可能性があります。
キャッシュが失敗した後、ロックメカニズムを使用して、1つの要求のみがキャッシュを再構築するために使用され、他のリクエストが古いキャッシュを待っているか使用していることを確認し、突然の多数のリクエストがバックエンドにヒットすることを避けます。
<?php
// キャッシュバージョン番号を設定します(初期化)
if (!apcu_exists('cache_version')) {
apcu_store('cache_version', 1);
}
function getUserProfile($userId) {
$version = apcu_fetch('cache_version');
$key = "user_profile_{$version}_{$userId}";
$data = apcu_fetch($key);
if ($data === false) {
// ユーザーデータを取得するにはシミュレーションします
$data = fetchUserProfileFromDb($userId);
// キャッシュを追加します,5数分の期限が切れました
apcu_store($key, $data, 300);
}
return $data;
}
function invalidateUserCache() {
// バージョン番号を追加します,バッチキャッシュ障害を実装します
$version = apcu_fetch('cache_version');
apcu_store('cache_version', $version + 1);
}
// データベースクエリ関数をシミュレートします
function fetchUserProfileFromDb($userId) {
// 実際のビジネスの実際のクエリに置き換えます
return [
'id' => $userId,
'name' => 'User ' . $userId,
'email' => 'user'.$userId.'@gitbox.net'
];
}
?>
上記の方法により、 APCU_CLEAR_CACHEへの頻繁な呼び出しによって引き起こされるパフォーマンスボトルネックは効果的に回避でき、利用効率とシステムの安定性をキャッシュすることができます。