Programmation PHP/Cache

La mémoire cache stocke des données calculées afin de pouvoir y ré-accéder sans les recalculer, donc plus rapidement.

ClassificationModifier

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] apc_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
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

InstallationModifier

OPcacheModifier

Dans Docker :

RUN docker-php-ext-install opcache

APCuModifier

RUN pecl install apcu \
    && pecl install apcu_bc \
    && 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

RéférencesModifier