現在の位置: ホーム> 最新記事一覧> キャッシュの更新を確実にするためにAPCU_ENTRYの有効な時間を設定する方法

キャッシュの更新を確実にするためにAPCU_ENTRYの有効な時間を設定する方法

gitbox 2025-05-26

APCU_Entry関数は、APCU拡張機能によって提供される関数であり、キャッシュデータを設定します。 APCU_STOREAPCU_FETCHとは異なり、 APCU_ENTRYはコールバック関数を自動的に実行して、キャッシュが存在しないときにデータを生成することができるため、複製データ生成プロセスを回避できます。

関数プロトタイプは次のとおりです。

 mixed apcu_entry ( string $key , callable $callback , int $ttl = 0 )
  • $キー:キャッシュキー、キャッシュデータを一意に識別します。

  • $ callback :キャッシュされたデータを生成するために使用されるコールバック関数。キャッシュが存在しない場合、APCUはコールバック関数を実行してデータを生成します。

  • $ TTL :キャッシュデータの有効な時間(秒単位)。デフォルトは0です。つまり、キャッシュが期限切れになることはありません。

2.キャッシュの有効時間を設定します

APCU_Entryでは、 TTLパラメーターを使用して、キャッシュの有効な時間を設定します。有効期限が切れた後、キャッシュは失効し、APCUはキャッシュされたデータを再生します。 TTLを合理的に設定することにより、キャッシュされたデータが時間内に更新されるようにし、キャッシュの有効期限による問題を回避できます。

例:

頻繁にアクセスする必要があり、5分間(300秒)キャッシュする必要があるデータベースクエリの結果があるとします。以下に示すように、 APCU_Entryを使用してキャッシュの有効な時間を設定できます。

 <?php
// これがデータベースを照会する関数であるとします
function fetchDataFromDatabase() {
    // データベースからデータを取得することをシミュレートします
    return "This is the data fetched from the database!";
}

// 使用 apcu_entry キャッシュクエリの結果,キャッシュの有効な時間を設定します 5 分
$data = apcu_entry('database_data', 'fetchDataFromDatabase', 300);

// 出力キャッシュまたはデータベースクエリの結果
echo $data;
?>

この例では、 APCU_Entryと呼ばれる場合、キャッシュに「Database_Data」という名前のデータがない場合、APCUはFetchDataFromDataBase関数を実行してデータを取得し、結果を5分間キャッシュします。 5分以内にキャッシュが再度要求された場合、APCUはキャッシュされたデータを直接返します。

3.キャッシュを時間内に更新します

場合によっては、データの変更がキャッシュの有効期限と一致しない場合があります。キャッシュされたデータが常に最新であることを確認するために、プログラムでキャッシュを更新できます。これにより、適切な時期にAPCU_DELETEを呼び出してから、 APCU_ENTRYを介してキャッシュを再生することにより、キャッシュを削除できます。

例:キャッシュを手動で更新します

<?php
// キャッシュを更新する必要があるとします
if (someConditionToRefreshCache()) {
    // 古いキャッシュデータを削除します
    apcu_delete('database_data');
}

// 次に、キャッシュされたデータを再生します
$data = apcu_entry('database_data', 'fetchDataFromDatabase', 300);

// 出力キャッシュまたはデータベースクエリの結果
echo $data;
?>

この例では、特定の条件が満たされた場合にのみ、キャッシュが手動で更新されます。これは、キャッシュされたコンテンツがタイムリーに更新されることを保証するための戦略です。

4。注意すべきこと

  • キャッシュの有効期限の選択時間:適切なキャッシュの有効期間を設定することが非常に重要です。設定時間が長すぎる場合、データが長い間更新されない場合があります。設定が短すぎると、キャッシュが頻繁に再生される可能性があり、パフォーマンスの損失が発生します。

  • スレッドの安全性APCU_Entry自体はスレッドセーフですが、高い並行性環境では、コールバック機能自体を安全に実行できることを確認することが非常に重要です。