Programmation PHP/Cache
Aller à la navigation
Aller à la recherche
La mémoire cache stocke des données calculées afin de pouvoir y ré-accéder sans les recalculer, donc plus rapidement.
Classification[modifier | modifier le wikicode]
Il existe plusieurs systèmes de cache en PHP pour accélérer l'exécution du code rappelé[1] :
Nom | Données stockées | Flush |
---|---|---|
Cache d'instance | Objet PHP. Ex :if (null === $x) {
$x = 1;
}
|
Relancer le script (ex : rafraichir la page Web). |
Cache de session | Objet PHP[2] | Vider les cookies du navigateur. |
OPcache | Opcode[3] | opcache_reset(); |
APCu | Variables utilisateurs dans la RAM[4] | apcu_clear_cache(); |
Cache du navigateur | Rendering | CTRL + F5 |
ESI | Partie de pages Web | Dépend du CDN ou proxy utilisé |
Cache de framework | Configuration, traductions | Exemple de Symfony : php bin/console cache:clear vide les fichiers temporaires de var/cache.
|
Proxy | Page web entière | Exemples, voir Varnish, HAProxy |
Base de données NoSQL | Paire clé-valeur | Voir les pages Memcached et Redis ci-après. |
Cache d'ORM | Annotations, requêtes SQL ou leurs résultats | Exemple de Doctrine :
php bin/console doctrine:cache:clear-metadata
php bin/console doctrine:cache:clear-query
php bin/console doctrine:cache:clear-result
ou : bin/console cache:pool:clear doctrine.query_cache_pool doctrine.result_cache_pool doctrine.system_cache_pool
ou en PHP : $qb = $entityManager->createQuery();
$cacheDriver = $qb->getResultCacheDriver();
$cacheDriver->delete('ma_cle_de_cache');
|
Chain cache | Tout | Utiliser les flushs de chaque cache inclus dans la chaine. |
Les dépendances des caches gérés en PHP se doivent de respecter la norme PSR6[5], c'est-à-dire de fournir les méthodes de manipulation du cache suivantes :
- hasItem
- getItem
- deleteItem
- clear
- save
Normalement chaque item a une durée de rétention (lifetime) avant renouvellement, ce qui évite de chercher à tout invalider régulièrement. Voici les opérations sur les items :
- getKey
- get (valeur)
- isHit (est utilisable)
- set (valeur)
- expiresAt
- expiresAfter
Installation[modifier | modifier le wikicode]
OPcache[modifier | modifier le wikicode]
Dans Docker :
RUN docker-php-ext-install opcache
APCu[modifier | modifier le wikicode]
Dans Docker[modifier | modifier le wikicode]
RUN pecl install apcu \
&& docker-php-ext-enable apcu --ini-name 10-docker-php-ext-apcu.ini \
&& docker-php-ext-enable apc --ini-name 20-docker-php-ext-apc.ini \
&& docker-php-ext-enable apc --ini-name 20-docker-php-ext-apc.ini
sur PHP < 8.0, ajouter après la première ligne :
&& pecl install apcu_bc \
Sur machine hôte[modifier | modifier le wikicode]
sudo pecl install apcu
echo "extension=apcu.so" >> php.ini