(PECL apcu >= 5.1.0)
apcu_entry — Recupera de manera atómica o genera una entrada de caché
Intenta recuperar de manera atómica el valor indexado por la clave key
en la caché. Si no puede ser recuperado, la función pasada a
generator es llamada, con el único argumento de la clave
contenida en key. El valor de retorno de la llamada es
luego almacenado en caché con el parámetro opcional ttl,
y luego devuelve el control.
Nota: Cuando el control entra en apcu_entry(), el bloqueo de la caché es adquirido de manera exclusiva. Es liberado cuando el control sale de apcu_entry(): Más específicamente, el cuerpo de la función pasada a
generatorse convierte en una sección crítica, lo que impide que dos procesos ejecuten la misma parte del código de manera concurrente. Además, impide la ejecución concurrente de cualquier otra función APCu, ya que adquirirá el mismo bloqueo.
La única función que puede ser llamada de manera segura por generator
es apcu_entry().
keyClave de una entrada de caché.
generator
Un parámetro de tipo callable que toma key como único argumento
y devuelve el valor a almacenar en caché.
ttl
Duración de vida; almacena la variable var en la caché por
una duración de ttl segundos. Después de la expiración de
ttl, la variable almacenada será retirada de la caché (en la
próxima solicitud). Si no se pasa ningún valor al parámetro
ttl (o si el valor de ttl es
0), la variable persistirá hasta que sea retirada
manualmente de la caché, o, de lo contrario, fallará al salir de la caché (durante un
borrado, reinicio, etc.).
Devuelve el valor almacenado en caché.
Ejemplo #1 Un ejemplo con 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);
?>El resultado del ejemplo sería:
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"
}
}