Атомарно извлекает или генерирует запись в кеше

# 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-функций, поэтому параллельное выполнение функций модуля невозможно.

Внимание

Единственная APCu-функция, которая безопасно вызывается в `callback`-функции, — apcu_entry().

### Список параметров

`key`
  Идентификатор записи.
`callback`
  Callback-функция, которая принимает единственный аргумент `key` и возвращает значение для кеширования.
`ttl`
  Время жизни; параметр `ttl` устанавливает интервал времени в секундах, в течение которого значение возврата `callback`-функции хранится в кеше. По истечении количества секунд, которое определили в параметре `ttl`, запись удаляется из кеша при следующем запросе. При пропуске параметра `ttl` или при передаче в параметр `ttl` значения `0` запись хранится, пока не удалится вручную или не исчезнет из кеша из-за автоматической очистки, перезапуска сервера и по другой причине.

### Возвращаемые значения

Функция возвращает значение, которое закешировала.

### Примеры

Пример #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