アトミックに値を取得するか、キャッシュエントリを生成する

# apcu_entry

(PECL apcu >= 5.1.0)

apcu_entry — アトミックに値を取得するか、キャッシュエントリを生成する

### 説明

function apcu_entry(string `$key`, callable `$callback`, int `$ttl` = 0): mixed

キャッシュに `key` が存在するかをアトミックに検索します。 存在しなければ `callback` が呼び出され、 `key` が唯一の引数として渡されます。 `callback` ではオプションで指定する `ttl` の間だけ値をキャッシュし、 キャッシュした値が返されます。

> 注意: apcu_entry() 関数に制御が移ると、 キャッシュのロックを排他的に取得します。 このロックは apcu_entry() の実行が終わったときに開放されます: この結果、`callback` はクリティカルセクションに入るため、 ふたつのプロセスが同時に同じコードパスを実行することができなくなります。 さらに、他のAPCuのあらゆる関数も同時に並列に実行できなくなります。 なぜなら、同じロックを共有しているからです。

警告

`callback` から安全に呼び出せるAPCuの関数は apcu_entry() だけです。

### パラメータ

`key`
  キャッシュエントリのキー。
`callback`
  `key` を唯一の引数として取り、 キャッシュする値を返す関数
`ttl`
  有効期間。`callback` の戻り値は、キャッシュに `ttl` 秒間だけ格納されます。 `ttl` が経過すると、格納されているエントリは （次のリクエスト時に）キャッシュから削除されます。 `ttl` が指定されていない（あるいは `ttl` が `0` の場合）は、 キャッシュから手動で削除される・あるいはキャッシュに存在できなくなる （clear, restart など）まで値が持続します。

### 戻り値

キャッシュされた値を返します。

### 例

例1 apcu_entry() の例

    <?php
    $config = apcu_entry("config", function($key) {
     return [
       "fruit" => apcu_entry("config.fruit", function($key){
         return [
           "apples",
           "pears"
         ];
       }),
       "people" => apcu_entry("config.people", function($key){
         return [
          "bob",
          "joe",
          "niki"
         ];
       })
     ];
    });

    var_dump($config);
    ?>

上の例の出力は以下となります。

    array(2) {
      ["fruit"]=>
      array(2) {
        [0]=>
        string(6) "apples"
        [1]=>
        string(5) "pears"
      }
      ["people"]=>
      array(3) {
        [0]=>
        string(3) "bob"
        [1]=>
        string(3) "joe"
        [2]=>
        string(4) "niki"
      }
    }

### 参考

- apcu_store() - 変数をデータ領域にキャッシュする
- apcu_fetch() - 格納されている変数をキャッシュから取得する
- apcu_delete() - 格納されている変数をキャッシュから取り除く

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open