Position actuelle: Accueil> Derniers articles> Comment nettoyer avec élégance le cache APCU_ENTRY dans le code PHP

Comment nettoyer avec élégance le cache APCU_ENTRY dans le code PHP

gitbox 2025-05-26

Dans les applications PHP très concurrentes, l'utilisation rationnelle du cache est un moyen important d'améliorer les performances et de réduire la pression de la base de données. L'APCU (User Cache PHP alternative) est une solution de cache locale légère adaptée à un accès rapide aux données dans des environnements autonomes. La fonction APCU_ENTRY est une interface très pratique et avancée dans APCU. Il peut élégamment implémenter le "cache de lecture, écrire et revenir s'il n'existe pas". Cet article présentera en détail comment utiliser APCU_ENTRY pour gérer les caches, améliorer les performances de l'application et joindre un exemple de code pratique.

1. Qu'est-ce que APCU_ENTRY ?

APCU_ENTRY est une fonction fournie par l'extension APCU dans PHP 5.5 et plus. Son utilisation de base est la suivante:

 mixed apcu_entry(string $key, callable $generator [, int $ttl = 0 ])

Description du paramètre:

  • $ key : le nom de clé mis en cache.

  • $ générateur : une fonction de rappel exécutée lorsque cette clé n'existe pas dans le cache, sa valeur de retour sera stockée dans le cache et retournée.

  • $ TTL : Le temps de survie en cache (secondes), la valeur par défaut est 0 pour signifier permanent.

Ce modèle est appelé Cache Stampede Protection , qui empêche plusieurs processus de découvrir simultanément une défaillance du cache et de demander la source de données sous-jacente.

2. Utilisez l'analyse du scénario

Imaginez un scénario typique: votre page d'accueil de votre site Web doit afficher une liste de produits à chaud, et cette partie des données est interrogée à partir de la base de données. Si vous vérifiez directement la bibliothèque pour chaque demande, cela entraînera évidemment des pertes de performances inutiles. Nous pouvons utiliser APCU_ENTRY pour mettre en cache gracieusement ces données:

 $hotProducts = apcu_entry('hot_products', function() {
    // Simuler la liste de lecture des produits à chaud de la base de données
    return getHotProductsFromDatabase();
}, 300); // cache 5 minute

De cette façon, lorsque le cache existe, les données de cache sont directement renvoyées; Sinon, un rappel est exécuté pour lire les données de la base de données et écrire dans le cache.

3. Cache élégamment propre

Dans les affaires réelles, le contenu en cache n'est pas statique. Par exemple, lorsque de nouveaux produits sont ajoutés à la liste de ventes à chaud ou que l'état du produit change, le cache pertinent doit être nettoyé.

Vous pouvez supprimer le cache spécifié en appelant activement APCU_DELETE () :

 apcu_delete('hot_products');

La prochaine fois que vous accédez à la prochaine fois, APCU_ENTRY appellera la fonction du générateur pour mettre à jour le cache. Cette méthode est plus claire et atomique que le traditionnel APCU_FETCH + APCU_STORE , et évite également le problème de la condition de course "vérification".

4. Pratique de l'application: Exemple de mise en cache des informations des utilisateurs

Ce qui suit est un exemple d'application combinant des URL. Nous simulons l'obtention d'informations utilisateur à partir d'une interface distante (telle que https://gitbox.net/api/user/123 ) et le cache:

 function getUserInfo($userId) {
    $cacheKey = "user_info_$userId";
    return apcu_entry($cacheKey, function() use ($userId) {
        // Simuler pour obtenir des données à partir d'une interface distante
        $url = "https://gitbox.net/api/user/$userId";
        $json = file_get_contents($url);
        return json_decode($json, true);
    }, 600); // cache 10 minute
}

$user = getUserInfo(123);

Si les données d'interface changent, vous pouvez appeler:

 apcu_delete("user_info_123");

Pour effacer le cache d'information des utilisateurs spécifiques.

5. Comparaison d'amélioration des performances

Par rapport à l'acquisition et à l'écriture traditionnels de la logique:

 if (!apcu_exists($key)) {
    $value = expensiveOperation();
    apcu_store($key, $value);
} else {
    $value = apcu_fetch($key);
}

L'utilisation d'APCU_ENTRY peut réduire considérablement la complexité du code, tout en ayant une meilleure atomicité et des performances de concurrence. Ceci est particulièrement important dans les environnements à haut trafic.

6. Résumé

APCU_ENTRY est une fonction très puissante et facile à utiliser dans APCU. Il intègre la génération de données, l'écriture de cache et la lecture du cache, évitant les problèmes de redondance et compétitifs dans la logique traditionnelle du cache. Combiné avec APCU_DELETE , les caches peuvent être gérées et nettoyées gracieusement, ce qui rend les applications PHP plus efficaces et stables. En utilisant correctement APCU_ENTRY , vous pouvez facilement créer un système Web plus rapide et plus faible.