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.
Discussions par date d’activité
6 discussions
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
Si vous déplacez des sites, avec copie intégrale de la base de données, et que le serveur d’accueil n’a pas les options disponibles (par exemple j’avais redis sur l’ancien, mais pas sur le nouveau), il suffit de :
Vider le colonne valeur du champs memoization de la table spip_meta
Et ensuite, vous pourrez activer le plugin memoization et le configurer.
Merci. J’ai intégré cette précision en note à la fin de la doc.
Répondre à ce message
Bonjour
retour d’expérience
PHP Version 7.4.27
memcached v 3.1.5 et memcache v 4.0.5.2 sont activés
memcached fonctionne mais en choisissant memcache
merci pour ce plugin qui fonctionne super bien
Natacha
En effet, PHP 7.4 est plus strict.
En attendant un fix plus radical tu peux corriger chez toi :
dans memoization_options, ajouter un ? avant tous les types de retour des fonctions des lignes 244 à 252 (et ailleurs si jamais). Donc par exemple pour l’erreur que tu signales ça devient
function cache_set($key, $value, $ttl = null) : ?bool return memoization()->set($key, $value, $ttl) ;
<∕code>
C’est juste un pis aller en attendant mieux. Ça tourne bien sur certains PHP 7.4 me dit-on donc il ne doit pas y avoir beaucoup de problèmes... Sinon tu peux revenir à un pHP 7.3 (ça marche !) ou attendre une version qui globalement corrige.
J’ai créé un ticket : https://git.spip.net/spip-contrib-extensions/memoization/issues/6
Nickel
ça fonctionne
bon ok j’avoue ne pas voir de différence de temps de chargement
faudrait investiguer plus longuement pour mesurer la différence entre memcached et memcache
merci en tout cas
Natacha
Répondre à ce message
Bonjour ;
votre plugins fonctionne à présent.
Mais est-ce normal ceci :
et ceci :
Cela est apparue lors de la recherche d’un plugin dans l’interface Gestion des plugins -> recherche et ajout de plugins.
Je rentre mon critère de recherche, et quand je clique sur « rechercher », j’ai ces erreurs (plusieurs fois), puis la recherche s’affiche en dessous de la liste des warnings.
Encore un problème de mon côté ? Étrange car tout le reste du site semble fonctionner.
Rémi.
C’est juste que ton hebergeur affiche les warnings, alors que la plupart du temps ils sont masqués. Cela étant, les warnings traduisent souvent une erreur de progr. Et en plus l’un d’entre eux sera bloquant dans le futur.
Peux tu télecharger et installer manuellement une version que j’ai faite rapidement, et tester pour me dire les résultats ?
https://git.spip.net/spip-contrib-extensions/memoization/archive/fix_warning_rsuinux.zip
(j’ai pas d’install redis, donc j’ai pas pu tester, et vu que je suis fatigué... je préfère pas commiter directement).
Je viens d’installer :
- affichage sans être connecté : ok
- affichage après être connecté : ok
- interface de configuration/rédaction d’article : ok
- recherche d’un plugin (c’est ici ou j’ai eu les warnings) : ok !
Plus aucune erreur !
Bravo !
J’espère que votre fatigue n’est pas dû au virus.
Merci beaucoup et prenez soin de vous.
Rémi.
Super, c’est publié !Ca sera disponible prochainement via SVP.
Répondre à ce message
Bonsoir ;
Comment détectez vous si le serveur Redis est présent (ou non), ainsi que sa méthode de connexion (socket ou tcp) ?
Je vous explique rapidement :
Je suis en auto hébergement, et donc j’ai accès à tout le serveur.
Spip est installé depuis déjà plusieurs mois, et fonctionne. Je viens d’installer un serveur redis, configuré en socket, et il fonctionne parfaitement (test avec redis-cli).
Mais memoization refuse de le découvrir !!! ça fait deux jours que je suis dessus.
Si vous aviez une idée, merci de m’aider.
Cordialement.
Rémi.
C’est la méthode « méthode » : https://git.spip.net/spip-contrib-extensions/memoization/src/branch/master/memoization_options.php#L38
Et ça teste
extension_loaded('redis')
: https://git.spip.net/spip-contrib-extensions/memoization/src/branch/master/memoization_options.php#L60Que retourne cet appel sur ton système ?
Bonjour ;
Merci pour cette réponse rapide.
J’ai peur que ce soit malgré tout un problème de mon côté :
php -m ne me renvois pas redis comme module chargé. Pas de module chargé, pas de réponse à la méthode : logique !
Voila qui me désappointe fortement (et je n’aime pas être désappointé, selon la formule consacré)
Je retourne donc à mes tablettes pour charger cette ?#« » !! de librairie .
Merci de votre aide.
Rémi.
Alors, résultat :
Je mets ici pour information, même si cela ne concerne pas directement le plugin, la solution :
Le problème venait ’simplement’ de l’installation de php7-redis sous Alpine Linux.
Il faut (il m’a fallut) installer php7-pecl-redis ET php7-pecl-igbinary. Suite à ça, mettre les deux fichiers ini dans la configuration de php7.
Seulement après, cela a fonctionné.
Et oui, pour igbinary, c’est marqué « à privilégier » dans la doc. Mais sous alpine Linux, c’est compilé avec !!!
Si cela aide quelqu’un, tant mieux. (peut être à intégrer dans la doc ?)
Bonne soirée. Et encore merci pour la réactivité.
Répondre à ce message
Un truc que je ne comprend pas : malgrès l’utilisation APCU j’ai quand même du cache « fichier » (mais bien plus petit que par le passé). Quid ?
Il y a plusieurs niveaux de cache. Les caches PHP (compilés dans le dossier skel) restent fichiers. Memoization ne traite que les caches HTML finaux.
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 :
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.
Suivre les commentaires : |