(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
generator
se 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().
key
Clave 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" } }