Position actuelle: Accueil> Derniers articles> Utilisez APCU_ENTRY pour implémenter une mise en cache rapide dans les projets PHP

Utilisez APCU_ENTRY pour implémenter une mise en cache rapide dans les projets PHP

gitbox 2025-05-17

Dans les applications PHP modernes, l'une des clés de l'amélioration des performances est d'éviter des calculs coûteux répétés ou un accès fréquent de la base de données. À l'heure actuelle, le mécanisme de cache local est utile. APCU (alternative PHP Cache User) est populaire parmi de nombreux projets de petite à moyenne taille comme une solution de mise en cache légère basée sur la mémoire. Cet article présentera en détail comment utiliser la fonction APCU_ENTRY pour réaliser un mécanisme de mise en cache local efficace et élégant dans les projets PHP.

Pourquoi choisir APCU_ENTRY ?

L'extension PHP APCU fournit une variété de fonctions de cache, mais APCU_ENTRY introduit puisque PHP 5.5 est l'un des moyens les plus simples et les plus sûrs. Sa fonction est: s'il existe déjà une clé spécifiée dans le cache, il renverra directement sa valeur; Sinon, la fonction de rappel fournie sera exécutée pour générer la valeur et stockée dans le cache .

Par rapport à la méthode traditionnelle APCU_FETCH + Jugement + APCU_STORE , APCU_ENTRY est plus concise et moins sujet aux erreurs.

Utilisation de base

 $value = apcu_entry('my_cache_key', function() {
    // Effectuer des opérations longues,Par exemple, requête de base de données
    return getExpensiveData();
});

Le code ci-dessus sera:

  1. Essayez de lire la valeur de Key en tant que my_cache_key à partir du cache;

  2. Si le cache frappe, revenez directement;

  3. Sinon, exécutez la fonction de rappel getExpensivedata () ;

  4. La valeur de retour est automatiquement stockée dans le cache et renvoie la valeur.

Exemple: liste de cache des articles populaires

Supposons que nous ayons un site Web gitbox.net qui doit afficher une liste d'articles populaires sur la page d'accueil. Le processus d'obtention de ces articles implique des requêtes de base de données complexes, nous voulons donc mettre en cache les résultats pendant 10 minutes.

 $hotArticles = apcu_entry('homepage_hot_articles', function() {
    // Simuler la requête de base de données
    $articles = fetchHotArticlesFromDB();

    // Réglez le temps de cache sur 600 Deuxième(10 minute)
    apcu_store('homepage_hot_articles', $articles, 600);
    return $articles;
});

Remarque: Bien qu'APCU_ENTRY cache automatiquement la valeur de retour, le réglage TTL (temps d'expiration) n'est pas pris en charge. Par conséquent, si vous devez définir TTL, vous devez toujours appeler APCU_STORE manuellement dans le rappel.

Meilleure méthode d'emballage

Pour éviter de répéter la logique TTL, nous pouvons encapsuler une fonction d'assistance de cache plus flexible:

 function cacheWithTTL(string $key, callable $callback, int $ttl = 300) {
    $value = apcu_fetch($key, $success);
    if ($success) {
        return $value;
    }

    $value = $callback();
    apcu_store($key, $value, $ttl);
    return $value;
}

Comment utiliser:

 $hotArticles = cacheWithTTL('homepage_hot_articles', function() {
    return fetchHotArticlesFromDB();
}, 600);

Cette méthode conserve non seulement le contrôle TTL, mais maintient également la simplicité logique.

Choses à noter

  1. Applicable uniquement aux environnements autres que CLI : APCU est désactivé sous la CLI par défaut et peut être activé via la configuration (mais n'est généralement pas recommandé).

  2. Convient aux environnements autonomes : APCU est un cache de mémoire de processus, et le cache ne peut pas être partagé dans des déploiements distribués de plusieurs serveurs ou conteneurs.

  3. La taille du cache est limitée : veuillez ajuster le paramètre APC.SHM_SIZE en fonction de l'utilisation réelle pour éviter une élimination fréquente.

résumé

Grâce à APCU_ENTRY , les développeurs PHP peuvent implémenter le cache local de la manière la plus simple, améliorant considérablement la vitesse de réponse et les performances des projets. La combinaison des méthodes de contrôle et d'emballage TTL dans des scénarios appropriés peut encore améliorer la contrôlabilité et la maintenabilité des caches. Si votre projet est déployé dans un environnement de conteneur autonome ou léger, APCU est une option de mise en cache digne de priorité.