Maison >développement back-end >tutoriel php >Comment implémenter la mise en cache en PHP et quelles techniques de mise en cache sont les meilleures pour les performances ?
La mise en cache est une technique essentielle dans les applications Web modernes pour améliorer les performances, réduire la charge du serveur et améliorer l'expérience utilisateur. En stockant temporairement les données afin de pouvoir y accéder rapidement, la mise en cache permet d'éviter les requêtes de base de données redondantes ou les calculs coûteux. En PHP, il existe différentes stratégies et techniques de mise en cache que vous pouvez mettre en œuvre en fonction de votre cas d'utilisation spécifique.
Dans cet article, nous aborderons les différents types de techniques de mise en cache, comment implémenter la mise en cache en PHP et les stratégies de mise en cache préférées à utiliser.
Il existe plusieurs types de mécanismes de mise en cache qui peuvent être utilisés dans les applications PHP. Chaque type répond à un objectif spécifique et peut être exploité en fonction des besoins de votre application.
Cette technique consiste à mettre en cache les données fréquemment consultées (telles que les requêtes de base de données, les réponses API ou les résultats calculés) afin qu'elles puissent être réutilisées sans nouvelle récupération ni recalcul.
La mise en cache des pages stocke l'intégralité de la sortie HTML rendue d'une page, qui peut être servie directement aux utilisateurs sans avoir besoin d'exécuter des scripts PHP pour chaque requête. Ceci est particulièrement utile pour les pages statiques et riches en contenu.
La mise en cache des opcodes stocke le bytecode PHP compilé en mémoire, ce qui réduit la surcharge liée à l'analyse des scripts PHP à chaque requête. Cela se fait généralement au niveau du runtime PHP.
Cela implique de stocker les données mises en cache sur le système de fichiers du serveur. Les fichiers sont écrits et lus directement à partir du disque, ce qui est plus lent que la mise en cache en mémoire mais utile pour les grands ensembles de données ou lorsque la persistance est nécessaire.
La mise en cache HTTP stocke les réponses HTTP au niveau du serveur ou du client pour éviter les demandes répétées pour la même ressource. Cela inclut la mise en cache des en-têtes comme Cache-Control ou ETag.
Mise en cache des résultats de requête ou des objets de base de données pour éviter de répéter les mêmes requêtes de base de données, réduisant ainsi la charge sur le serveur de base de données.
Explorons comment implémenter certaines des techniques de mise en cache les plus couramment utilisées en PHP.
Vous pouvez facilement mettre en œuvre une mise en cache basée sur des fichiers en écrivant les données dans un fichier cache et en vérifiant si le fichier cache existe et est à jour avant d'interroger à nouveau la base de données.
Exemple de mise en cache basée sur des fichiers :
<?php $cacheFile = 'cache/data_cache.txt'; $cacheTime = 3600; // 1 hour // Check if the cache file exists and is still valid if (file_exists($cacheFile) && (filemtime($cacheFile) + $cacheTime > time())) { // Cache is valid, use cached data $data = file_get_contents($cacheFile); } else { // Cache is expired or doesn't exist, fetch fresh data $data = fetchDataFromDatabase(); // Example function to fetch data // Save the fetched data to the cache file file_put_contents($cacheFile, $data); } echo $data; ?>
Cette technique fonctionne bien pour les petites applications ou lorsque les données ne changent pas souvent. Cependant, elle est plus lente que les techniques de mise en cache en mémoire et doit être utilisée avec prudence pour les ensembles de données plus volumineux.
Pour une mise en cache plus rapide, vous pouvez utiliser la mise en cache en mémoire avec des outils comme Memcached ou Redis. Ces outils fournissent une couche de mise en cache hautes performances en stockant les données en mémoire, ce qui rend leur récupération beaucoup plus rapide qu'à partir du système de fichiers.
Installer Redis et l'extension PHP Redis :
Exemple de mise en cache Redis :
<?php // Create a Redis instance $redis = new Redis(); $redis->connect('127.0.0.1', 6379); // Connect to Redis server $cacheKey = 'user_data'; $cacheTime = 3600; // Cache for 1 hour // Check if the data is cached $data = $redis->get($cacheKey); if ($data === false) { // Data not in cache, fetch it from the database $data = fetchDataFromDatabase(); // Your function to fetch data // Cache the result for future requests $redis->setex($cacheKey, $cacheTime, $data); } echo $data; ?>
Cette approche est fortement recommandée pour les applications où les performances sont une préoccupation majeure, car Redis et Memcached sont tous deux extrêmement rapides et prennent en charge des fonctionnalités de mise en cache avancées telles que les délais d'expiration et l'invalidation du cache.
Si vous constatez que certaines requêtes de base de données sont exécutées à plusieurs reprises, vous pouvez mettre en cache les résultats de ces requêtes. La plupart des bases de données modernes, notamment MySQL et PostgreSQL, disposent de mécanismes de mise en cache des requêtes intégrés, mais vous pouvez également mettre en cache manuellement les requêtes en PHP.
Exemple de mise en cache des requêtes de base de données :
<?php $cacheKey = 'db_query_cache'; $cacheTime = 3600; // Cache for 1 hour // Check if the result of the query is already cached $queryResult = $redis->get($cacheKey); if ($queryResult === false) { // Query not cached, fetch it from the database $queryResult = fetchDataFromDatabase(); // Your DB query here // Cache the query result $redis->setex($cacheKey, $cacheTime, serialize($queryResult)); } else { // Unserialize cached result $queryResult = unserialize($queryResult); } echo json_encode($queryResult); ?>
Dans cette approche, au lieu d'interroger la base de données à chaque fois, le résultat est stocké dans un système de mise en cache comme Redis et y est récupéré en cas de besoin. Cela réduit considérablement le nombre de requêtes de base de données et améliore les performances.
OPcache est une extension PHP intégrée qui met en cache le bytecode compilé des scripts PHP en mémoire. En mettant en cache les scripts compilés, OPcache élimine le besoin d'analyser les fichiers PHP à chaque requête.
Pour activer OPcache :
opcache.enable=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000
<?php if (function_exists('opcache_get_status')) { var_dump(opcache_get_status()); } ?>
OPcache est particulièrement utile pour les applications PHP avec un traitement lourd car il améliore les temps de réponse en ignorant la compilation des scripts PHP et en exécutant directement le bytecode mis en cache.
Vous pouvez contrôler la mise en cache au niveau HTTP en utilisant les en-têtes HTTP appropriés tels que Cache-Control, ETag ou Last-Modified. Ces en-têtes indiquent aux navigateurs et aux caches intermédiaires comment mettre le contenu en cache.
<?php $cacheFile = 'cache/data_cache.txt'; $cacheTime = 3600; // 1 hour // Check if the cache file exists and is still valid if (file_exists($cacheFile) && (filemtime($cacheFile) + $cacheTime > time())) { // Cache is valid, use cached data $data = file_get_contents($cacheFile); } else { // Cache is expired or doesn't exist, fetch fresh data $data = fetchDataFromDatabase(); // Example function to fetch data // Save the fetched data to the cache file file_put_contents($cacheFile, $data); } echo $data; ?>
Ceci est particulièrement utile pour les ressources statiques telles que les images, les fichiers CSS et JavaScript.
Si votre application diffuse du contenu statique (par exemple, des images, des vidéos), vous pouvez décharger la mise en cache vers un CDN comme Cloudflare ou AWS CloudFront. Ces services mettent en cache le contenu à des emplacements périphériques dans le monde entier, réduisant ainsi la latence et améliorant les temps de chargement pour les utilisateurs finaux.
La mise en cache est un outil puissant pour améliorer les performances et l'évolutivité des applications PHP. En fonction de vos besoins, vous pouvez choisir différentes techniques de mise en cache comme la mise en cache de fichiers, la la mise en cache en mémoire (Redis ou Memcached), la la mise en cache des requêtes, opcode mise en cache (OPcache) et mise en cache HTTP.
Pour la plupart des applications PHP modernes, l'utilisation de Redis pour la mise en cache d'objets ou de données, aux côtés de OPcache pour la mise en cache d'opcodes, offre d'excellents avantages en termes de performances. Tenez toujours compte de votre cas d'utilisation spécifique, comme la fréquence à laquelle vos données changent et l'importance des performances, pour déterminer la meilleure stratégie de mise en cache pour votre application.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!