Lors de la construction d'API reposant haute performance, la vitesse de réponse et la charge du système sont toujours les principaux problèmes qui les concernent. Afin de résoudre le goulot d'étranglement des performances causé par la lecture fréquente des mêmes données, PHP fournit une variété de mécanismes de mise en cache, parmi lesquels la fonction APCU_ENTRY est un outil efficace pour utiliser le cache utilisateur APCU. Cet article expliquera comment utiliser la fonction APCU_ENTRY pour mettre en cache les données de réponse dans l'API RESTful pour améliorer considérablement les performances de l'interface.
APCU_ENTRY est une fonction pratique fournie par l'extension PHP APCU. Sa fonction est: lorsqu'il existe une clé spécifiée dans le cache, il renvoie directement la valeur correspondante; Lorsque la clé n'existe pas dans le cache, la fonction de rappel fournie est appelée pour générer des données et enregistrer les données dans le cache.
La signature de la fonction est la suivante:
mixed apcu_entry(string $key, callable $callback, int $ttl = 0)
$ key : Cache Key Name.
$ rappel : une fonction exécutée lorsque le cache n'existe pas, utilisé pour générer des données.
$ TTL : Temps d'expiration facultatif en cache (secondes), par défaut pour ne jamais expirer.
Supposons que nous ayons une API RESTful qui renvoie les informations du produit, et chaque demande est lue à partir de la base de données, ce qui peut facilement entraîner une pression accrue. En utilisant APCU_ENTRY pour mettre en cache ces données de réponse, le nombre de requêtes de base de données peut être réduit efficacement.
Voici un exemple de code:
<?php
header('Content-Type: application/json');
// Simuler pour obtenir des informations sur les produits à partir de la base de données
function getProductFromDatabase($productId) {
// Supposons qu'il s'agit d'une opération de requête de base de données
return [
'id' => $productId,
'name' => 'Échantillons de produits',
'price' => 99.99,
'url' => 'https://gitbox.net/product/' . $productId
];
}
// Obtenir des produits ID
$productId = isset($_GET['id']) ? intval($_GET['id']) : 1;
// Construire le nom de la clé de cache
$cacheKey = 'product_' . $productId;
// utiliser apcu_entry Cache
$product = apcu_entry($cacheKey, function() use ($productId) {
return getProductFromDatabase($productId);
}, 300); // cache 5 minute
echo json_encode([
'status' => 'success',
'data' => $product
]);
Pour utiliser APCU_ENTRY , vous devez vous assurer que le serveur est installé et activé pour l'extension APCU:
Installez l'extension (en prenant le système Debian à titre d'exemple):
sudo apt install php-apcu
Modifiez le fichier php.ini et ajoutez:
extension=apcu.so
apc.enable_cli=1
Redémarrer le service PHP:
sudo systemctl restart php8.1-fpm
APCU ne convient qu'aux environnements autonomes et ne convient pas au déploiement de cluster multi-nœuds. Si votre API fonctionne sur plusieurs serveurs, il est recommandé d'utiliser des caches distribuées telles que Redis ou Memcached.
Le cache d' APCU_ENTRY est au niveau de la mémoire, et le redémarrage de PHP ou serveur effacera toutes les données mises en cache.
Lorsque vous utilisez le cache, assurez-vous que le temps de défaillance du cache (TTL) est raisonnable pour éviter les données obsolètes en raison du cache à long terme.
Grâce à la fonction APCU_ENTRY , les développeurs PHP peuvent ajouter des mécanismes de mise en cache locaux efficaces à l'API RESTful sans introduire de bibliothèques supplémentaires. Cela améliore non seulement la vitesse de réponse de l'interface, mais réduit également considérablement la charge du système, ce qui convient particulièrement à la lecture fréquemment mais pas des données très variables. Pour les systèmes de petite et moyenne taille ou les applications API autonomes, APCU_ENTRY est une solution d'optimisation des performances légère, simple et pratique.