(PECL apcu >= 5.1.0)
apcu_entry — Récupère atomiquement ou génère une entrée de cache
Tente de récupérer atomiquement la valeur indexée par la clé key
dans le cache. Si elle ne peut pas être récupérée, la fonction passée à
generator
est appelée, avec pour unique argument la valeur
contenue dans key
. La valeur de retour de l'appel est
ensuite mise en cache avec le paramètre optionnel ttl
,
puis rend la main.
Note: Lorsque le contrôle entre dans apcu_entry() le verrou du cache est acquis de façon exclusive. Il est libéré lorsque le contrôle quitte apcu_entry(): Plus précisément, le corps de la fonction passée à
generator
devient une section critique, ce qui interdit à deux processus d'exécuter la même partie du code concurrentiellement. En outre, il interdit l'exécution concurrentielle de tout autre fonction APCu, puisqu'elle acquerra le même verrou.
La seule fonction qui peut être appelée en toute sécurité par generator
est apcu_entry().
key
Clé d'une entrée de cache.
generator
Un paramètre de type callable qui prend key
pour unique argument
et retourne la valeur à mettre en cache.
ttl
Durée de vie; stocke la variable var
dans le cache pour
une durée de ttl
secondes. Après l'expiration de
ttl
, la variable stockée sera retirée du cache (à la
prochaine requête). Si aucune valeur n'est passée au paramètre
ttl
(ou si la valeur de ttl
est
0
), la variable persistera jusqu'à qu'elle soit retirée
manuellement du cache, ou, sinon, elle échouera à sortir du cache (lors d'un
effaçage, redémarrage, etc.).
Retourne la valeur mise en cache.
Exemple #1 Un exemple avec 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);
?>
L'exemple ci-dessus va afficher :
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" } }