Plugin mémoization

La mémoïzation est « une technique consistant à réduire le temps d’exécution d’une fonction en mémorisant ses résultats d’une fois sur l’autre » [1]. C’est aussi le nom d’un plugin SPIP qui a recours aux caches memcache(d), APC, eaccelerator ou redis, pour accélérer les accés aux caches SPIP. Il propose aussi une option de base, filecache, pour les hébergements sans cache mémoire.

La librairie utilisée pour ce plugin peut également être utilisée de manière autonome sur mesure dans le code d’un plugin, ou même par toute application indépendante de SPIP. Pour cela, voyez l’article « Memoization, la librairie ».

Mettre les caches en mémoire

Memoization est particulièrement utile lorsque votre hébergement propose un système de cache mémoire ’user’. À chacun des systèmes de cache mémoire les plus répandu correspond une option de memoization :
-  APC Cache ou APCu Cache
-  redis
-  memcache(d)

Lorsque votre site dispose de l’un de ces systèmes de caches, le paramétrage de memoization vous en propose le choix. Il suffit de choisir l’option, et votre SPIP bénéficie d’un cache mémoire au lieu d’un cache sous la forme de fichiers sur le disque. L’accès aux caches est donc grandement accéléré.

Lorsqu’activé sur un SPIP, le plugin memoization ne touche pas au fonctionnement habituel du cache de SPIP, sur la durée de mise en cache d’une page ou noisette. Cela ne fait que transférer le stockage du mécanisme de cache de SPIP dans la RAM. 

Il y a une autre différence par rapport au cache SPIP classique : avec memoization il n’y en a tout simplement pas de garbage collector car c’est chaque système de cache qui gère son propre nettoyage des données périmées. Cela permet d’éviter un bug récurrent sur les gros sites SPIP : l’« explosion » du cache.

APC ou APCu
-  Doc APC Cache (obsolète)
-  Doc APCu Cache
-  il n’y a aucun paramétrage supplémentaire à faire.
-  Lorsque vous activez l’option APC Cache ou APCu Cache, vous pouvez aussi bénéficier d’un navigateur-analyseur de cache en installant le plugin XRay en complément, ainsi que de fonctionnalités avancées de gestion du cache avec CacheLab.

redis
-  https://redis.io/clients
-  Pour ce système de cache, le paramétrage SPIP du plugin propose deux modes pour interroger la base : « Serveur » et « Socket Unix ». Ce choix dépends de la configuration du serveur redis choisi par l’admin sys.
-  Pour la sérialisation : privilégier SERIALIZER_IGBINARY, qui est plus performant

memcache(d)
-  memcached est une évolution plus récente de memcache.
-  Liens :

Autres options de cache

filecache

L’option filecache est la seule option qui ne range pas les caches en mémoire. On l’utilisera lorsque l’hébergement ne propose pas de cache en mémoire.

Avec filecache, memoization range les caches sous la forme de fichiers, comme le SPIP de base, mais distribue ces fichiers dans un plus grand nombre de dossiers que par défaut avec SPIP. Il n’y a pas de réglage limite pour le filecache ; par défaut, mémoization prévoit une distribution homogène des caches parmi 16^4 fichiers. La plupart du temps ce sera satisfaisant, mais en cas de collision, il est possible de modifier cette valeur et régler ainsi la taille maxi (il faudra faire quelques essais).

Note : l’option filecache est intégrée dans SPIP à partir de la version 3.1.

nocache

Avec nocache, SPIP ne gère plus de cache. C’est à utiliser temporairement seulement, le temps d’un débug par exemple.

Constante _MEMOIZATION_DELESTER_LOAD_SEUIL

Cette constante PHP règle le seuil de charge du serveur à partir de laquelle memoïzation va servir une version déjà en cache, même si elle est périmée. Ainsi, au delà de ce seuil, les calculs demandés sont moins fréquents.
-  La charge est connue par la fonction PHP sys_getloadavg
-  La valeur par défaut de cette constante est actuellement de 20.

Sur certains hébergements, la valeur renvoyée par sys_getloadavg n’est pas significative. On pourra dans ce cas annuler ce délestage en modifiant la valeur de la constante dans le fichier d’options du site. Par exemple :

define ('_MEMOIZATION_DELESTER_LOAD_SEUIL', 100000);

Notes sur la configuration

Réinitialisation : Si vous déplacez un site, avec copie intégrale de la base de données, et que le serveur d’accueil n’a pas les mêmes options disponibles (par exemple redis sur l’ancien, mais pas sur le nouveau), il faut vider la colonne valeur du champs memoization de la table spip_meta, puis activer le plugin memoization et le configurer.

XCache était jadis utilisable, mais n’est pas compatible PHP7 et a été retiré du plugin à partir de sa version 3.1.0.

Notes

[1d’après Wikipedia

Discussion

Une discussion

  • 1

    Bonjour j’ai un spip en Version 4.2.6
    Les options APC, APCU, memcached et redis sont en grisé, j’en conclue que les mécanisme de mise en mémoire ne sont pas disponible sur ce serveur.
    Y a t’il un intérêt à activer quand même ce plugin ?

    • J’ai réussi à activer redis, mais je ne comprends pas quels paramètre appliquer pour que ça marche. J’imagine bien que ça sort du cadre du plugin, mais je veux bien de l’aide. Comment répondre aux questions :
      Serveur ou socket Unix ?
      J’ai mis le chemin /domains/domaine.ext/public_html/tmp/redis.sock
      Mot de passe : celui de la base ou celui du compte sur le serveur ?
      Base de données : normalement je mets juste le nom de la base

      Merci si vous avez l’usage de de Redis sous CentOS 8

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom