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