Formation Google AnalyticsSavez-vous bien utiliser les outils de mesure d'audience ?
Effectuez-vous un calcul de ROI (Retour sur investissement) pour savoir comment améliorer vos campagnes emarketing ?
Savez-vous utiliser les bons outils pour booster votre taux de transformation ?
La formation Web Analytics de Ranking Metrics, présentée par un expert reconnu officiellement par Google Analytics, vous apportera les réponses à toutes vos questions !
===> Informations et inscriptions.

[Tutorial] Installer memcache pour PHP

Poster un nouveau sujet Imprimer cette discussion    Forum -> Administration d'un site Web   Les dernières discussions de ce forum sont disponibles au format RSS
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 
fandecine
Modérateur
Modérateur

Inscrit le: 02 Avr 2005
Messages: 1475
Localisation: Béarn

URL permanente de ce messagePosté le : Jeu Jan 10, 2008 15:36    Sujet du message: [Tutorial] Installer memcache pour PHP

Suite à une discussion et quelques MP me demandant comment installer et paramétrer memcache, je vous livre un petit tuto Wink

Je précise que le script perl de chargement de la configuration du daemon memcached n'est pas de moi mais de Jay Bonci et que j'ai ré-ecrit le script shell de lancement du daemon deDanny Bembibre ( http://www.vbseo.com/blogs/danny-bembibre/daemon-scripts-memcached-44/ ) prévu pour CentOS pour l'adapter à la Debian etch (le reste est de moi Very Happy ). Merci donc de laisser les commentaires dans les scripts par respet pour leurs auteurs.

C'est parti !

Pour installer memcached et memcache pour PHP à partir des sources, il vous faut bien entendu disposer sur votre serveur des outils de compilation et de configuration (gcc, g++, make, autoconf, automake, libtool, flex, bison etc ...). Pour savoir si ces outils sont installés, il suffit de saisir en ligne de commande :

Code:
 sd-10781:~# whereis g++
g++: /usr/bin/g++


Si le programme est absent, un simple apt-get fera l'affaire !

Il faut également installer le paquetage zlib1g-dev

On choisi d'installer les sources dans /usr/local/src

1 - Installation de memcached

on récupère l'archive memcached, on la décompacte, on la compile et on l'installe :

Code:

cd /usr/local/src
wget http://www.danga.com/memcached/dist/memcached-1.2.4.tar.gz
tar zxf memcached-1.2.4.tar.gz
cd /usr/local/src/memcached-1.2.4
./configure
make
make install


On va maintenant créer un fichier de configuation indiquant à memcached : /etc/memcached.conf

1 - la taille mémoire à utiliser (parametre -m)
2 - le port sur lequel memcached sera accessible (parametre -p)
3 - l'utilisateur qui executera memcached (parametre -u)
4 - preciser que memcached doit juste être utilisé en local (parametre -l 127.0.0.1) consultez la doc si vous utilisez un cluster de serveurs Wink

Code:

#Quantité mémoire à allouer à memcached
-m 16
# port
-p 11211
# utilisateur pour executer le daemon nobody/apache/www-data
-u nobody
# ecouter localement seulement
-l 127.0.0.1


On crée maintenant le script shell de lancement du daemon : /etc/init.d/memcached
Code:

#!/bin/bash
#
# memcached    Ce script shell prend en charge le démarrage et l'arrêt du daemon memcached.
#
# description: memcached est un système de cache mémoire distribué,
#              performant et generique, créé dans le but d'accelérer
#              les sites web dynamique en diminuant la charge sur la BDD.
#             
# fichier de configuration du daemon : /etc/memcached.conf
# script de chargement du lancement du daemon avec sa config : /usr/local/bin/start-memcached
#
# sur une idée de Danny Bembibre ( http://www.vbseo.com/blogs/danny-bembibre/daemon-scripts-memcached-44/ )
#
# adapté pour Debian etch par Jérôme Rossignol ( http://www.blog-mestre.fr )
#

. /lib/lsb/init-functions
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/bin/memcached
DAEMONBOOTSTRAP=/usr/local/bin/start-memcached
DAEMONCONF=/etc/memcached.conf
DESC="memcached"
PIDFILE=/var/run/memcached.pid

test -x $DAEMON || exit 0
test -x $DAEMONBOOTSTRAP || exit 0

set -e

start() {
        log_daemon_msg "Starting $DESC"
        log_end_msg 0
        start-stop-daemon --start --quiet   --pidfile $PIDFILE --exec $DAEMONBOOTSTRAP -- $DAEMON_OPTS ;
}

stop() {
    if [ -f $PIDFILE ]; then
        if start-stop-daemon --quiet --stop --oknodo --retry 30   --pidfile $PIDFILE --exec $DAEMON; then
            rm -f $PIDFILE
           log_daemon_msg "Stopping $DESC"
            log_end_msg 0
        else
            log_end_msg 1
        fi
    else
        log_daemon_msg "$DESC not running"
        log_end_msg 0
    fi
}

case "$1" in
 start)
  start
  ;;
 stop)
  stop
  ;;
 restart|reload)
  stop
  start
  ;;
 *)
  echo $"Usage: $0 {start|stop|restart|reload}"
  exit 1
esac


On oublie pas de lui donner les droits d'éxécution : chmod +x /etc/init.d/memcached

On crée le fichier perl /usr/local/bin/start-memcached


Code:

#!/usr/bin/perl -w
# start-memcached
# 2003/2004 - Jay Bonci <jaybonci@debian.org>
# This script handles the parsing of the /etc/memcached.conf file
# and was originally created for the Debian distribution.
# Anyone may use this little script under the same terms as
# memcached itself.
use strict;
if ($> != 0 and $< != 0) {
 print STDERR "Only root wants to run start-memcached.\n";
 exit;
}
my $etcfile = shift || "/etc/memcached.conf";
my $params = [];
my $etchandle;
# This script assumes that memcached is located at /usr/bin/memcached, and
# that the pidfile is writable at /var/run/memcached.pid
my $memcached = "/usr/local/bin/memcached";
my $pidfile = "/var/run/memcached.pid";
# If we don't get a valid logfile parameter in the /etc/memcached.conf file,
# we'll just throw away all of our in-daemon output. We need to re-tie it so
# that non-bash shells will not hang on logout. Thanks to Michael Renner for
# the tip
my $fd_reopened = "/dev/null";
sub handle_logfile {
 my ($logfile) = @_;
 $fd_reopened = $logfile;
}
sub reopen_logfile {
 my ($logfile) = @_;
 open *STDERR, ">>$logfile";
 open *STDOUT, ">>$logfile";
 open *STDIN, ">>/dev/null";
 $fd_reopened = $logfile;
}
# This is set up in place here to support other non -[a-z] directives
my $conf_directives = {
 "logfile" => \&handle_logfile
};
if (open $etchandle, $etcfile) {
 foreach my $line (<$etchandle>) {
  $line =~ s/\#.*//go;
  $line = join ' ', split ' ', $line;
  next unless $line;
  next if $line =~ /^\-[dh]/o;
  if ($line =~ /^[^\-]/o) {
   my ($directive, $arg) = $line =~ /^(.*?)\s+(.*)/;
   $conf_directives->{$directive}->($arg);
   next;
  }
  push @$params, $line;
 }
}
unshift @$params, "-u root" unless (grep $_ eq '-u', @$params);
$params = join " ", @$params;
if (-e $pidfile) {
 open PIDHANDLE, "$pidfile";
 my $localpid = <PIDHANDLE>;
 close PIDHANDLE;
 chomp $localpid;
 if (-d "/proc/$localpid") {
  print STDERR "memcached is already running.\n";
  exit;
 } else {
  `rm -f $localpid`;
 }
}
my $pid = fork();
if ($pid == 0) {
 reopen_logfile($fd_reopened);
 exec "$memcached $params";
 exit(0);
} elsif (open PIDHANDLE,">$pidfile") {
 print PIDHANDLE $pid;
 close PIDHANDLE;
} else {
 print STDERR "Can't write pidfile to $pidfile.\n";
}


et on lui donne aussi les droits d'exécution : chmod +x /usr/local/bin/start-memcached

On indique maintenant à notre serveur de lancer le daemon au démarrage :

Code:
update-rc.d /etc/init.d/memcached defaults


Memcached est installé. on utilise les commandes suivantes pour le lancer ou l'arrêter :

Code:
/etc/init.d/memcached start
/etc/init.d/memcached stop
/etc/init.d/memcached restart



Hé! vous barrez pas, c'est pas fini ! Il faut maintenant recompiler PHP pour qu'il utilise memcache Wink

Bon, on respire un grand coup et on s'y remet Very Happy


On récupère l'archive de la librairie memcache pour PHP, on la décompresse et on la copie dans le dossier ext de nos sources PHP (dans l'exemple c'est php 5.2.4 dont les sources se trouvent dans /usr/local/src/php-5.2.4 )

Code:

cd /usr/local/src
wget http://pecl.php.net/get/memcache-2.2.1.tgz
tar zxf memcache-2.2.1.tgz
mv /usr/local/src/memcache-2.2.1 /usr/local/src/php-5.2.4/ext/memcache


Maintenant il nous faut reconstruire le fichier configure de php pour qu'il prenne en compte notre nouvelle extension :

Code:

cd /usr/local/src/php-5.2.4
rm configure
./buildconf --force


Vous pouvez maintenant recompiler PHP en oubliant pas de préciser --enable-memcache dans vos options de configuration :

Code:

./configure ..... --enable-memcache .....
make
make install


Si php est compilé statiquement avec apache, vous devez aussi recompiler apache Very Happy

Vous redémarrez apache ainsi que le daemon memcached et c'est prêt.

Pour utiliser memcache avec php, repportez à la doc de php (http://fr3.php.net/manual/fr/ref.memcache.php) et ayez un peu d'imagination pour utiliser cette mémoire partagée. (Par exemple, je l'utilise beaucoup pour stocker des classe sérialisées) mais je fais confiance à votre imagination ...

Ouf! c'est fini ! mais pas de panique, c'est plus long à lire qu'à faire Wink
 
fandecine Visiter le site web du posteur
bproductiv
WRInaute accro
WRInaute accro

Inscrit le: 27 Déc 2004
Messages: 2362
Localisation: La roche s/ yon

URL permanente de ce messagePosté le : Jeu Jan 10, 2008 17:07    Sujet du message: [Tutorial] Installer memcache pour PHP

une reco, une ! :p
 
bproductiv Visiter le site web du posteur
athoms
WRInaute occasionnel
WRInaute occasionnel

Inscrit le: 22 Avr 2004
Messages: 236
Localisation: France

URL permanente de ce messagePosté le : Jeu Jan 10, 2008 19:17    Sujet du message: [Tutorial] Installer memcache pour PHP

Une autre reco Smile
Merci pour ce tutoriel!
 
athoms Visiter le site web du posteur
duplex13
WRInaute occasionnel
WRInaute occasionnel

Inscrit le: 30 Juin 2005
Messages: 144
Localisation: Québec

URL permanente de ce messagePosté le : Mar Jan 15, 2008 14:57    Sujet du message: [Tutorial] Installer memcache pour PHP

Bonjour,

Félicitations pour le tutoriel. Je le mets dans mes favoris.

Par contre, j'utilise en ce moment php_accelerator et je voudrai savoir si memcache est compatible avec php_accelerator et si ce sont des modules complémentaires ?

De plus est-ce que ça demande beaucoup de mémoire sur le serveur ?

Merci
 
duplex13 Visiter le site web du posteur
fandecine
Modérateur
Modérateur

Inscrit le: 02 Avr 2005
Messages: 1475
Localisation: Béarn

URL permanente de ce messagePosté le : Mar Jan 15, 2008 15:38    Sujet du message: [Tutorial] Installer memcache pour PHP

Memcache n'est pas comparable à php-accelerator.

php-accelerator et un cache d'opcode pour php alors que memcache est un serveur de memoire partagée utilisable avec php mais aussi d'autres langages de script.

La mémoire allouée à memcache est paramétrable dans sa config Wink
 
fandecine Visiter le site web du posteur
duplex13
WRInaute occasionnel
WRInaute occasionnel

Inscrit le: 30 Juin 2005
Messages: 144
Localisation: Québec

URL permanente de ce messagePosté le : Mar Jan 15, 2008 15:49    Sujet du message: [Tutorial] Installer memcache pour PHP

Merci pour l'explication Very Happy

fandecine a écrit:

La mémoire allouée à memcache est paramétrable dans sa config Wink


Par contre avec un serveur dédié qui a 512 ko de mémoire vive dont en général à peine 60 ko libre, est-ce que c'est conseillé d'installer memcache ? Et si oui avec quelle taille du cache ?

Merci

Vincent
 
duplex13 Visiter le site web du posteur
fandecine
Modérateur
Modérateur

Inscrit le: 02 Avr 2005
Messages: 1475
Localisation: Béarn

URL permanente de ce messagePosté le : Mar Jan 15, 2008 16:03    Sujet du message: [Tutorial] Installer memcache pour PHP

duplex13 a écrit:
Merci pour l'explication Very Happy

fandecine a écrit:

La mémoire allouée à memcache est paramétrable dans sa config Wink


Par contre avec un serveur dédié qui a 512 ko de mémoire vive dont en général à peine 60 ko libre, est-ce que c'est conseillé d'installer memcache ? Et si oui avec quelle taille du cache ?

Merci

Vincent


c'est à toi de voir comment l'utilisation de memcache serait de nature à diminuer la taille de tes processus donc de libérer de la mémoire.

Une bonne utilisation de memcache est de l'utiliser pour cacher des données necessitant un traitement gourmand en ressources et en mémoire et présente sur de nombreuses pages du site.

Exemple avec un site de bandes déssinées: Sur chaque page du site tu présente la liste des 15 dernières bandes dessinées que tu as ajouté (titre avec lien, date, auteur etc ...). Cela nécessite de faire une requete mysql pour chaque page. Tu peux stocker le résultat dans un tableau par exemple, le sérialiser et le stocker en mémoire partagée. Losque tu dois l'utiliser, tu testes si il est en mémoire, si il n'y est pas tu le génére à partir de la bdd, si il y est, tu l'utilise directement. Wink
 
fandecine Visiter le site web du posteur
duplex13
WRInaute occasionnel
WRInaute occasionnel

Inscrit le: 30 Juin 2005
Messages: 144
Localisation: Québec

URL permanente de ce messagePosté le : Mar Jan 15, 2008 16:09    Sujet du message: [Tutorial] Installer memcache pour PHP

Merci encore pour toutes ces explications. Dès que j'ai le temps et le courage, je vais tester memcache sur mon serveur.

A plus

Vincent
 
duplex13 Visiter le site web du posteur
Mumuri
WRInaute accro
WRInaute accro

Inscrit le: 03 Nov 2004
Messages: 1775
Localisation: bordeaux

URL permanente de ce messagePosté le : Ven Jan 25, 2008 12:57    Sujet du message: [Tutorial] Installer memcache pour PHP

bonjour,

j'aimerai savoir s'il est envisageable de stocker des pages complétes en mémoire ? en gros si çà vaut vraiment le coup.
 
Mumuri Visiter le site web du posteur
 
Montrer les messages depuis:   
Revenir en haut    Forum -> Administration d'un site Web Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1 - 
Connexion
Nom d'utilisateur:    Mot de passe:      Se connecter automatiquement à chaque visite    

CLIQUEZ ICI pour vous inscrire à WebRankInfo (forum, annuaire, outils...)

Connexion

© 2001-2005 phpBB Group, support français
Personnalisation : WebRankInfo ™


 ODP  Firefox  Alsacreations  annuaire webmaster Yagoort