| |
Savez-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.
|
Voir le sujet précédent :: Voir le sujet suivant
|
| Auteur |
Message |
| |
|
fandecine Modérateur

Inscrit le: 02 Avr 2005 Messages: 1475 Localisation: Béarn
|
Posté 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
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 ). 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
| 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
Bon, on respire un grand coup et on s'y remet
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
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  |
|
| |
|
 |
bproductiv WRInaute accro

Inscrit le: 27 Déc 2004 Messages: 2362 Localisation: La roche s/ yon
|
Posté le : Jeu Jan 10, 2008 17:07 Sujet du message: [Tutorial] Installer memcache pour PHP |
|
|
| une reco, une ! :p |
|
| |
|
 |
athoms WRInaute occasionnel

Inscrit le: 22 Avr 2004 Messages: 236 Localisation: France
|
Posté le : Jeu Jan 10, 2008 19:17 Sujet du message: [Tutorial] Installer memcache pour PHP |
|
|
Une autre reco
Merci pour ce tutoriel! |
|
| |
|
 |
duplex13 WRInaute occasionnel

Inscrit le: 30 Juin 2005 Messages: 144 Localisation: Québec
|
Posté 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 |
|
| |
|
 |
fandecine Modérateur

Inscrit le: 02 Avr 2005 Messages: 1475 Localisation: Béarn
|
Posté 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  |
|
| |
|
 |
duplex13 WRInaute occasionnel

Inscrit le: 30 Juin 2005 Messages: 144 Localisation: Québec
|
Posté le : Mar Jan 15, 2008 15:49 Sujet du message: [Tutorial] Installer memcache pour PHP |
|
|
Merci pour l'explication
| fandecine a écrit: |
La mémoire allouée à memcache est paramétrable dans sa config  |
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 |
|
| |
|
 |
fandecine Modérateur

Inscrit le: 02 Avr 2005 Messages: 1475 Localisation: Béarn
|
Posté le : Mar Jan 15, 2008 16:03 Sujet du message: [Tutorial] Installer memcache pour PHP |
|
|
| duplex13 a écrit: |
Merci pour l'explication
| fandecine a écrit: |
La mémoire allouée à memcache est paramétrable dans sa config  |
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.  |
|
| |
|
 |
duplex13 WRInaute occasionnel

Inscrit le: 30 Juin 2005 Messages: 144 Localisation: Québec
|
Posté 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 |
|
| |
|
 |
Mumuri WRInaute accro

Inscrit le: 03 Nov 2004 Messages: 1775 Localisation: bordeaux
|
Posté 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. |
|
| |
|
 |
| |
|
|
|
|
Autres sujets de discussion :
|
|