現在の位置: ホーム> 最新記事一覧> APCU_ENTRYを介してJSONデータとオブジェクトをキャッシュする方法

APCU_ENTRYを介してJSONデータとオブジェクトをキャッシュする方法

gitbox 2025-05-18

APCU_ENTRYは、PHPによって提供されるAPCU(代替PHPキャッシュ)キャッシュ機能です。 APCUは、PHPスクリプトの変数をキャッシュするために設計されたユーザーレベルのキャッシュです。データをメモリに保存することにより、APCUはデータベースまたはファイルシステムへのアクセスの数を効果的に減らし、パフォーマンスを向上させることができます。

APCU_Entry関数の関数は、キャッシュに特定のデータがあるかどうかを確認することです。存在する場合、データはキャッシュから直接フェッチされます。存在しない場合、データは計算され、結果はキャッシュに保存されます。このプロセスは、繰り返し計算を回避するだけでなく、キャッシュの有効性も保証します。

APCU_ENTRY関数の基本的な構文:

 apcu_entry(string $key, callable $callback, int $ttl = 0)
  • $キー:キャッシュされたデータを一意に識別するために使用されるキャッシュされたキー名。

  • $ callback :キャッシュされたコンテンツの計算に使用される閉鎖(コールバック)。閉鎖は、キャッシュが存在しない場合にのみ実行されます。

  • $ TTL :キャッシュされた有効期限、秒単位(オプションパラメーター)。

APCU_Entryを使用してJSONデータをキャッシュします

JSONデータは、PHPアプリケーションで多くの場合、フロントエンドとデータを交換するか、データベースに保存されます。場合によっては、外部インターフェイスからJSONデータを取得し、頻繁に使用する必要があります。毎回外部インターフェイスのリクエストを避けるために、 APCU_Entryを使用してJSONデータをメモリにキャッシュし、重複したネットワーク要求を削減し、パフォーマンスを向上させることができます。

例:外部APIによってフェッチされたJSONデータをキャッシュします

外部API(GitHub APIなど)があり、ユーザー情報を取得してキャッシュする必要があるとします。 APCU_Entryを使用すると、このAPIへの頻繁なアクセスを避けることができます。

 <?php
// キャッシュされたキー名を定義します
$key = 'github_user_data';

// 使用 apcu_entry キャッシュ JSON データ
$user_data = apcu_entry($key, function() {
    // 外からシミュレートします API 获取データ
    $url = 'https://api.github.com/users/octocat';
    
    // 送信 GET リクエストして取得します JSON 応答
    $json_data = file_get_contents($url);
    
    // 将応答转换为 PHP 配列
    return json_decode($json_data, true);
}, 3600); // 设置キャッシュ 1 時間(36002番)

// 输出キャッシュ或获取到的データ
echo 'User Name: ' . $user_data['login'] . "\n";
echo 'User Bio: ' . $user_data['bio'] . "\n";
?>

上記の例では、 APCU_ENTRYはGitHubユーザーデータがキャッシュされているかどうかを確認します。キャッシュが存在する場合、キャッシュされた結果を直接返します。キャッシュが存在しない場合は、 FILE_GET_CONTENTS関数を介してデータを取得して外部APIにアクセスし、データをキャッシュに保存し、キャッシュの有効期限を1時間に設定します。

知らせ:

  • APCU_Entryはメモリにキャッシュデータを保存するため、比較的小さくて頻繁にアクセスされるデータに適しています。持続性を必要とするより大きなデータセットまたはデータの場合、他のキャッシュスキーム(RedisやMemcachedなど)が推奨されます。

  • APCU_Entryはメモリベースのキャッシュであるため、そのストレージは一時的なものであり、PHPスクリプトが終了するとキャッシュが期限切れになります。

APCU_ENTRYでオブジェクトをキャッシュします

JSONデータに加えて、 APCU_ENTRYを使用してPHPオブジェクトをキャッシュすることもできます。多くのシナリオでは、PHPオブジェクトには複雑な計算が必要であるか、データベースから大量のデータをクエリする必要があります。これらのオブジェクトをキャッシュすると、プログラムの応答速度が大幅に向上する可能性があります。

例:キャッシュデータベースクエリの結果はオブジェクトです

オブジェクトにカプセル化する必要があるデータベースクエリの結果があり、要求するたびにデータベースクエリを避けるためにオブジェクトをキャッシュできるとします。

 <?php
class User
{
    public $id;
    public $name;
    public $email;

    public function __construct($id, $name, $email)
    {
        $this->id = $id;
        $this->name = $name;
        $this->email = $email;
    }
}

// キャッシュされたキー名を定義します
$key = 'user_data_123';

// 使用 apcu_entry キャッシュデータ库查询结果
$user = apcu_entry($key, function() {
    // 模拟从データ库获取データ
    $id = 123;
    $name = 'John Doe';
    $email = '[email protected]';

    // 作成する User オブジェクトと返品
    return new User($id, $name, $email);
}, 3600); // 设置キャッシュ 1 時間(36002番)

// 输出キャッシュ或获取到的データ
echo 'User Name: ' . $user->name . "\n";
echo 'User Email: ' . $user->email . "\n";
?>

この例では、 APCU_ENTRYを使用してユーザーオブジェクトをキャッシュします。 APCU_Entryが要求するたびに、 APCU_ENTRYはこのオブジェクトがすでにキャッシュに存在するかどうかを確認します。存在する場合、キャッシュされたオブジェクトを直接返します。キャッシュが存在しない場合、新しいオブジェクトを作成してキャッシュします。

知らせ:

  • オブジェクトは、キャッシュに保存する前にシリアル化する必要があります。 APCUは、オブジェクトのシリアル化と脱滑りを自動的に処理するため、開発者は手動で動作する必要はありません。

  • キャッシュの有効期限が切れた後、新しいリクエストは結果を再計算してキャッシュします。