Dans PHP, APCU_ENTRY est une fonction puissante fournie par l'extension APCU pour implémenter l'initialisation automatique du cache: lorsque la clé de cache spécifiée n'existe pas, la fonction de rappel sera automatiquement appelée pour générer des valeurs de cache et les stocker. Il simplifie considérablement la logique du cache et améliore l'efficacité du code.
Cependant, parfois lorsque vous utilisez APCU_ENTRY , vous pouvez rencontrer des situations où le cache n'est pas efficace. Cet article combinera des exemples de code spécifiques pour vous aider à résoudre et à déboguer les problèmes communs que le cache APCU_ENTRY n'est pas efficace.
<?php
$key = 'user_123';
$value = apcu_entry($key, function() {
// Simuler la requête de base de données
return 'user_data_from_db';
});
echo $value;
Dans le code ci-dessus, s'il n'y a pas d'utilisateur_123 dans le cache, la fonction de rappel sera appelée pour générer et mettre en cache les données. Le cache sera lu directement l'appel suivant.
Symptômes : Une erreur est rapportée en appelant APCU_ENTRY ou un comportement de cache est anormal.
débogage :
if (!extension_loaded('apcu')) {
die('APCu L'extension n'est pas installée ou non activée,Veuillez installer et activer l'extension。');
}
Assurez-vous qu'APC.Enabled = 1 est dans la configuration PHP et redémarrez le service PHP.
Par défaut, le cache APCU n'est pas valide en mode CLI. apc.enable_cli doit être défini sur 1 .
débogage :
var_dump(ini_get('apc.enable_cli')); // Si 0,maisCLIMode sans cache
La solution consiste à modifier php.ini :
apc.enable_cli=1
Redémarrez ensuite la CLI.
Lorsque l'espace de cache est insuffisant, les anciennes données peuvent être recyclées, ce qui entraîne une défaillance du cache.
débogage :
Voir les statistiques du cache APCU:
print_r(apcu_cache_info());
Observez l'utilisation et la fragmentation de l'espace du cache.
Ajustez la configuration apc.shm_size pour augmenter l'espace de cache.
Assurez-vous que le nom de clé de cache entrant est une chaîne stable et unique. Les noms de clés générés dynamiquement peuvent entraîner le manquement du cache.
Si une exception est lancée à l'intérieur de la fonction de rappel ou renvoie NULL , APCU_ENTRY peut ne pas être écrit dans le cache.
débogage :
$value = apcu_entry('key', function() {
try {
// Erreurs possibles
return some_function();
} catch (Exception $e) {
error_log($e->getMessage());
return false; // Ou d'autres valeurs par défaut raisonnables
}
});
<?php
$key = 'sample_key';
if (!extension_loaded('apcu')) {
die('Veuillez installer et activer APCu Étendu');
}
if (PHP_SAPI === 'cli' && ini_get('apc.enable_cli') != '1') {
die('CLI En mode APCu Cache non activé,Veuillez définir apc.enable_cli=1');
}
$value = apcu_entry($key, function() {
// Simuler des exceptions
if (rand(0,1) === 0) {
throw new Exception('Simuler des exceptions,Cache non écrite');
}
return 'Cache';
});
var_dump($value);
print_r(apcu_cache_info());
Confirmez que l'extension APCU est installée et activée.
Le mode CLI nécessite qu'APC.enable_cli soit activé.
Vérifiez si l'espace de cache est suffisant.
Assurez-vous que le nom de la clé de cache est unique et stable.
La fonction de rappel doit être sûre et stable pour éviter les exceptions.
Grâce aux étapes ci-dessus, le cache est essentiellement résolu lors de l'utilisation d'APCU_ENTRY .
Pour plus d'informations APCU, veuillez vous référer à: https://gitbox.net/manual/apcu.html