Dans le mécanisme de mise en cache de PHP, APC (alternative PHP Cache) et APCU (APC User Cache) sont deux extensions de longue date. Alors que la version de PHP continue d'évoluer, APC est remplacé par APCU, et dans PHP 7 et PHP 8, la fonction APCU_ENTRY () est devenue progressivement le moyen grand public d'utilisation du cache. Cet article explorera les différences entre la fonction APCU_ENTRY () et le mécanisme de mise en cache APC traditionnel dans PHP 7 et PHP 8, ainsi que leurs scénarios d'utilisation respectifs et leurs impacts de performance.
À l'ère PHP 5.x, APC est une extension de cache populaire, qui prend en charge deux fonctions: le cache OPCode et le cache de données utilisateur. Cependant, depuis que PHP 5.5 a introduit l' OPCACH intégré, la fonction de mise en cache Opcode d'APC a été remplacée. Pour maintenir la prise en charge de la mise en cache des données des utilisateurs, l'APCU a été introduite et axée sur la mise en cache de niveau utilisateur.
Par conséquent, à partir de PHP 7, il est recommandé d'utiliser APCU au lieu d'APC, en se concentrant sur la mise en cache des données utilisateur.
APCU_ENTRY () est une nouvelle fonction introduite par l'extension APCU depuis PHP 7.1. Sa fonction est de "obtenir ou calculer et mettre en cache une valeur", en évitant les vérifications de cache et le code de réglage. Par exemple:
$value = apcu_entry('my_cache_key', function() {
// Effectuer des actions coûteuses
return file_get_contents('https://gitbox.net/data.json');
}, 300); // cache 300 Deuxième
Cette fonction simplifie les modèles de mise en cache communs:
if (apcu_exists('my_cache_key')) {
$value = apcu_fetch('my_cache_key');
} else {
$value = some_expensive_operation();
apcu_store('my_cache_key', $value, 300);
}
Conception de fonction et facilité d'utilisation
APCU_ENTRY () encapsule la logique de cache dans un appel de fonction, évitant le processus fastidieux de vérification manuelle, d'obtention et de définition de caches. En revanche, l'utilisation traditionnelle d'APC oblige les développeurs à appeler explicitement APC_Fetch () et APC_Store () , augmentant la possibilité de duplication de code et d'erreurs.
Sécurité et performances du fil
APCU_ENTRY () utilise un mécanisme de verrouillage dans son implémentation interne pour éviter la pénétration du cache, c'est-à-dire le problème de plusieurs demandes déclenchant des opérations coûteuses en même temps lorsque le cache échoue. Les méthodes APC traditionnelles manquent d'une telle protection intégrée et obligent les développeurs à gérer manuellement les problèmes de concurrence.
Performance dans PHP 8
PHP 8 optimise de nombreuses performances sous-jacentes, APCU_ENTRY () a de meilleures performances lors de l'exécution de fermetures que PHP 7. En même temps, APCU a une meilleure compatibilité avec les moteurs JIT dans PHP 8, ce qui signifie également qu'il a une efficacité de mise en cache plus élevée dans des environnements de concurrence élevés.
Lisibilité et maintenabilité
Le code utilisant APCU_ENTRY () est plus clair et plus conforme au style de codage PHP moderne. Le code de cache APC traditionnel est souvent plein de jugements conditionnels et de nidification des fonctions, ce qui n'est pas propice à la maintenance.
Assistance de rappel
apcu_entry () accepte une fonction de rappel comme un argument, qui offre une grande flexibilité pour le chargement paresseux et les calculs paresseux. En revanche, l'approche traditionnelle de l'APC n'a pas ce soutien natif.
Dans PHP 7.1 et supérieur, APCU_ENTRY () est préféré, en particulier lors de la gestion des opérations avec un coût de calcul élevé.
Évitez de compter sur APCU en mode multi-processus ou CLI, car son cache est généralement limité au processus actuel.
Configurez la taille de la mémoire partagée de l'APCU (comme APC.SHM_SIZE ) pour assurer la stabilité du cache.
Supposons que vous construisez un système qui obtient du contenu de l'API, afin d'éviter les demandes fréquentes d'interfaces externes (comme https://gitbox.net/api/posts ), vous pouvez écrire ceci:
$posts = apcu_entry('cached_posts', function() {
$json = file_get_contents('https://gitbox.net/api/posts');
return json_decode($json, true);
}, 600);
Cette méthode garantit que les données sont réaccélérées uniquement lorsque le cache échoue, en évitant les appels en double et les déchets de ressources.
APCU_ENTRY () est une interface de cache recommandée par APCU dans PHP moderne, et présente les avantages de la simplicité, des bonnes performances et de la sécurité de la concurrence. Par rapport à la méthode de mise en cache traditionnelle de l'APC, il convient plus au modèle de développement PHP actuel, en particulier dans PHP 7 et PHP 8 pour de meilleures performances et facilité d'utilisation. Dans les projets réels, les développeurs doivent migrer progressivement de l'ancienne fonction APC_ * vers APCU_ENTRY () pour obtenir une expérience de cache plus fiable.