PHP Conference Ehime 2026

Yac

Introduction

Yac (Yet Another Cache) est un cache de données utilisateur en mémoire partagée, sans verrou, pouvant être utilisé pour remplacer APC ou un memcached local.

Yac stocke les données en mémoire partagée, ce qui les rend visibles par chaque worker PHP de la même machine sans aucune communication inter-processus. Au lieu de verrous, Yac repose sur des mises à jour atomiques de slots et quelques sondes de collision, ce qui signifie qu'un défaut de cache ne bloque jamais une requête, et qu'une écriture concurrente peut au pire provoquer un échec de stockage ou une lecture ratée que l'appelant peut simplement réessayer.

Sans verrou ni communication inter-processus dans le chemin d'accès, une lecture est essentiellement une recherche dans une table de hachage en mémoire partagée. Yac est ainsi extrêmement rapide, avec une latence de lecture à la microseconde, et son débit peut s'adapter au nombre de workers tant que les écritures sont réparties sur plusieurs clés ; voir les » tests de performance.

Parce que Yac échange des garanties de cohérence contre vitesse et débit, il convient mieux aux données coûteuses à produire mais faciles à recréer : fragments de page, instantanés de configuration, petites réponses de service et autres caches locaux. Il ne doit pas être utilisé comme stockage faisant autorité pour des données irremplaçables.

Depuis yac 2.4.0, les petites valeurs scalaires — NULL, booléens, la plupart des entiers (ceux qui tiennent sur 60 bits signés dans une compilation 64 bits), chaînes jusqu'à 7 octets et tableaux vides — sont stockées directement dans le slot de la table de hachage plutôt que dans un bloc de valeur séparé (« valeurs intégrées »), ce qui supprime l'allocation et la copie de bloc à chaque accès et améliore significativement les performances tout en réduisant l'utilisation mémoire. La version 2.4.0 a également remplacé le moteur de compression FastLZ par LZ4, rendant les lectures compressées plusieurs fois plus rapides.

Note:

La mémoire partagée n'est visible qu'au sein d'une seule machine. Pour partager un cache entre plusieurs serveurs, utiliser un cache réseau tel que Memcached ou Redis.

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top