Position actuelle: Accueil> Derniers articles> La meilleure façon d'utiliser APCU_ENTRY et APCU_FETCH ensemble

La meilleure façon d'utiliser APCU_ENTRY et APCU_FETCH ensemble

gitbox 2025-05-20

Dans le développement d'applications PHP, la mise en cache est un moyen important d'améliorer les performances et la vitesse de réponse. L'APCU (alternative PHP Cache User) est une solution de mise en cache de données utilisateur légère et efficace qui peut stocker les données directement dans la mémoire partagée, en évitant les requêtes fréquentes de disque ou de base de données.

Parmi les nombreuses fonctions fournies par APCU, APCU_ENTRY et APCU_FETCH sont deux fonctions très critiques et couramment utilisées. L'utilisation de ces deux fonctions peut raisonnablement améliorer considérablement l'efficacité du cache et la simplicité du code.

APCU_ENTRY : un outil puissant pour l'accès au cache atomique

APCU_ENTRY est une fonction relativement nouvelle qui nous permet d'écrire et de lire en cache de manière atomique. Sa syntaxe est la suivante:

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

Le principe de travail de cette fonction est: si la clé de clé spécifiée $ existe dans le cache, la valeur correspondante sera directement renvoyée; S'il n'existe pas, la fonction de rappel du générateur $ sera appelée pour générer des données et les données seront renvoyées après avoir écrit au cache. Ce mécanisme empêche la survenue d'un "effet choquant" dans un environnement simultané (c'est-à-dire que plusieurs demandes essaient de générer le même contenu mis en cache en même temps).

Exemple:

 $data = apcu_entry('user_list', function() {
    // Supposons qu'il s'agit d'une requête de base de données très coûteuse
    return file_get_contents('https://api.gitbox.net/users');
}, 300); // cache 5 minute

Le code ci-dessus signifie que si le cache user_list n'existe pas, les données de l'utilisateur seront récupérées à partir de l'interface distante et mises en cache pendant 300 secondes.

APCU_FETCH : Obtenez rapidement du contenu mis en cache

Par rapport à APCU_ENTRY , APCU_FETCH est plus léger. Il est uniquement utilisé pour obtenir des données du cache, sans la possibilité de générer un rappel. Il est utilisé comme suit:

 mixed apcu_fetch(string $key, bool &$success = null)

Grâce au deuxième paramètre $ succès , vous pouvez déterminer si l'acquisition est réussie.

Exemple:

 $success = false;
$data = apcu_fetch('config_data', $success);

if (!$success) {
    // cache失效,Régénérer
    $data = file_get_contents('https://config.gitbox.net/settings');
    apcu_store('config_data', $data, 600);
}

Meilleures pratiques pour faire correspondre

Bien que les fonctions d' APCU_ENTRY et APCU_FETCH se chevauchent, dans le développement réel, une utilisation raisonnable peut améliorer la flexibilité et la clarté du code. Voici quelques façons recommandées de correspondre:

1. La priorité est donnée à l'utilisation d'APCU_ENTRY pour gérer les caches indispensables

Pour les caches critiques qui doivent exister (comme les grands lots de données, les résultats des appels d'interface, etc.), il est recommandé d'utiliser APCU_ENTRY car il est atomique et peut éviter une génération répétée de caches:

 $articleList = apcu_entry('home_articles', function() {
    return file_get_contents('https://news.gitbox.net/api/articles');
}, 120);

2. Utilisez APCU_FETCH pour détecter rapidement s'il existe un cache non critique

Pour les caches avec une forte optionnalité (telles que les données de configuration, les préférences des utilisateurs, etc.), vous pouvez d'abord utiliser APCU_FETCH pour détecter rapidement les hits de cache, puis décider de mettre à jour les caches:

 $success = false;
$theme = apcu_fetch('user_theme_' . $userId, $success);

if (!$success) {
    $theme = getUserThemeFromDb($userId);
    apcu_store('user_theme_' . $userId, $theme, 3600);
}

3. Encapsuler la logique du cache pour améliorer la réutilisabilité du code

Vous pouvez encapsuler APCU_ENTRY dans une méthode générale pour rendre le code commercial plus concis:

 function cache_remember($key, callable $callback, $ttl = 300) {
    return apcu_entry($key, $callback, $ttl);
}

// Exemple d'utilisation
$config = cache_remember('site_config', function() {
    return file_get_contents('https://config.gitbox.net/v2');
});

résumé

En utilisant rationnellement APCU_ENTRY et APCU_FETCH , nous pouvons non seulement effectuer efficacement la lecture et les mises à jour du cache, mais aussi éviter les problèmes de calcul répétés dans des environnements simultanés. La fonction à choisir dépend du type, de l'importance des données mises en cache et de la stratégie de mise à jour. La maîtrise des modèles d'utilisation de ces deux est une partie importante de la construction d'applications PHP à haute performance.