(PECL apcu >= 5.1.0)
apcu_entry — Автоматическое извлечение или создание записи в кеше
Автоматически пытается найти запись с заданным ключом key
.
Если не может, то вызывается генератор generator
и ему
передаётся ключ key
как единственный аргумент.
Сгенерированное значение заносится в кеш с указанным ttl
и
возвращается.
Замечание: Когда контроль передаётся apcu_entry(), производится эксклюзивная блокировка кеша, которая снимается после завершения работы apcu_entry(): это приводит к тому, что тело генератора
generator
помещается в критическую секцию, запрещая двум процессам запустить выполнение одинакового кода конкурентно. К тому же, это приводит к запрету конкурентного запуска любых других функций APCu, так как они будут выставлять ту же блокировку.
Единственная функция APCu, которую можно безопасно вызывать в генераторе
generator
- это apcu_entry().
key
Идентификатор записи
generator
Callback-функция, принимающая один параметр key
и возвращающая значение для кеширования.
ttl
Время жизни; переменная var
будет храниться в течение
ttl
секунд. Как только 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" } }