2012-05-22 19:42:48 +02:00
|
|
|
|
% Copyright (c) 2004-2010 Evolix <info@evolix.fr>
|
|
|
|
|
% Permission is granted to copy, distribute and/or modify this document
|
|
|
|
|
% under the terms of the GNU Free Documentation License, Version 1.2
|
|
|
|
|
% or any later version published by the Free Software Foundation;
|
|
|
|
|
% with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
|
|
|
|
|
% A copy of the license is included at http://www.gcolpart.com/howto/fdl.html
|
|
|
|
|
|
|
|
|
|
\chapter{Memcached}
|
|
|
|
|
|
|
|
|
|
Site officiel: \url{http://memcached.org/}
|
|
|
|
|
|
|
|
|
|
\section{Pr<EFBFBD>sentation}
|
|
|
|
|
|
|
|
|
|
Memcached est une base de donn<6E>es de type cl<63>-valeur dont les informations sont
|
|
|
|
|
stock<EFBFBD>es uniquement en m<>moire. Le but vis<69> est de fournir un cache aux
|
|
|
|
|
applications (web ou non) afin de stocker des r<>sultats de requ<71>tes sur des API
|
|
|
|
|
ou base de donn<6E>es dont les appels sont couteux en ressources et temps
|
|
|
|
|
d'ex<65>cution.
|
|
|
|
|
|
2012-05-23 07:39:55 +02:00
|
|
|
|
Le cas d'utilisation typique est sa mise en place dans une infrastructure ayant un
|
2012-05-22 19:42:48 +02:00
|
|
|
|
serveur de base de donn<6E>e et N serveurs applicatifs. Memcached est fait pour
|
|
|
|
|
g<EFBFBD>rer les acc<63>s r<>seau concurrents, et peux <20>tre interrog<6F> par chaque serveur
|
|
|
|
|
applicatif. Le premier serveur fait sa requ<71>te <20> la base de donn<6E>es ou API
|
|
|
|
|
distante, puis stocke le r<>sultat dans Memcached. Les autres serveurs pourront
|
2012-05-23 07:39:55 +02:00
|
|
|
|
alors directement utiliser les donn<6E>es mises en cache dans Memcached, en
|
2012-05-22 19:42:48 +02:00
|
|
|
|
b<EFBFBD>n<EFBFBD>ficiant d'un acc<63>s beaucoup plus rapide.
|
|
|
|
|
|
2012-05-23 07:39:55 +02:00
|
|
|
|
Memcached supporte <20>galement la r<>partition de sa base sur plusieurs
|
2012-05-22 19:42:48 +02:00
|
|
|
|
serveurs mis en cluster.
|
|
|
|
|
|
|
|
|
|
Au contraire de Redis, Memcached ne dispose d'aucun moyen de sauvegarde
|
|
|
|
|
sur disque, il n'est donc adapt<70> que pour stocker des donn<6E>es qui peuvent
|
|
|
|
|
facilement <20>tre reg<65>n<EFBFBD>r<EFBFBD>es par l'application ou h<>berg<72>es par un service tiers
|
|
|
|
|
(plus lent).
|
|
|
|
|
|
|
|
|
|
Memcached est sorti dans sa premi<6D>re version en 2003. Il est <20>crit en C et
|
|
|
|
|
distribu<EFBFBD> sous la licence libre BSD.
|
|
|
|
|
|
|
|
|
|
\section{Installation}
|
|
|
|
|
|
|
|
|
|
Le paquet Debian memcached est disponible dans les d<>p<EFBFBD>ts officiels et fourni la
|
|
|
|
|
version 1.4.5:
|
|
|
|
|
\begin{verbatim}
|
|
|
|
|
# aptitude install memcached
|
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
|
|
|
|
\section{Configuration}
|
|
|
|
|
|
|
|
|
|
La configuration de Memcached est triviale et se fait dans l'unique fichier
|
|
|
|
|
\texttt{/etc/memcached.conf}.
|
|
|
|
|
|
|
|
|
|
Voici un exemple de configuration:
|
|
|
|
|
\begin{verbatim}
|
|
|
|
|
-d
|
|
|
|
|
# Mode verbose (pour du debug)
|
|
|
|
|
logfile /var/log/memcached.log
|
|
|
|
|
# -v
|
|
|
|
|
# -vv
|
|
|
|
|
# Taille m<>moire (en Mo)
|
|
|
|
|
-m 64
|
|
|
|
|
# Adresses d'<27>coute (<28> supprimer pour ouvrir de partout)
|
|
|
|
|
-l 127.0.0.1
|
|
|
|
|
-p 11211
|
|
|
|
|
-u nobody
|
|
|
|
|
# Nombre max de connexions
|
|
|
|
|
-c 2048
|
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
|
|
|
|
Les options importantes sont notamment \texttt{-d} pour que Memcached soit lanc<6E>
|
|
|
|
|
en mode d<>mon, \texttt{-m} qui indique la taille m<>moire <20> allouer pour la base.
|
|
|
|
|
<EFBFBD> noter la taille m<>moire utilis<69>e par Memcached pourra <20>tre l<>g<EFBFBD>rement
|
|
|
|
|
sup<EFBFBD>rieure <20> la limite fix<69>e dans la configuration.
|
|
|
|
|
On peut <20>galement fixer une limite maximum pour le nombre de connexions
|
2012-05-23 07:39:55 +02:00
|
|
|
|
concurrentes <20> la base via l'option \texttt{-c} (par d<>faut, limit<69> <20> 1024). <20>
|
2012-05-22 19:42:48 +02:00
|
|
|
|
noter que Memcached est capable de g<>rer un nombre tr<74>s <20>lev<65> de connexions,
|
|
|
|
|
d'autant plus que chaque connexion ouverte consomme une quantit<69> de m<>moire
|
2012-05-23 07:39:55 +02:00
|
|
|
|
n<EFBFBD>gligeable, il est donc conseill<6C> de d<>finir une limite assez haute.
|
2012-05-22 19:42:48 +02:00
|
|
|
|
|
|
|
|
|
Comme pour Redis, on peut <20>galement vouloir d<>sactiver l'<27>coute sur un socket
|
|
|
|
|
r<EFBFBD>seau pour privil<69>gier un socket unix, pour des raisons de s<>curit<69>. L'option <20>
|
|
|
|
|
utiliser pour cela est \texttt{-s}, suivi du chemin vers le socket unix.
|
|
|
|
|
|
|
|
|
|
\section{Utilisation}
|
|
|
|
|
|
|
|
|
|
Voici quelques commandes basiques pour interagir avec la base de donn<6E>es:
|
|
|
|
|
\begin{itemize}
|
|
|
|
|
\item Connexion au serveur: on utilise \texttt{telnet}:
|
|
|
|
|
\begin{verbatim}$ telnet localhost 11211\end{verbatim}
|
2012-05-23 07:39:55 +02:00
|
|
|
|
\item Stocker une valeur:
|
2012-05-22 19:42:48 +02:00
|
|
|
|
\begin{verbatim}set greeting 1 0 11
|
|
|
|
|
Hello world
|
|
|
|
|
STORED\end{verbatim}
|
|
|
|
|
Les param<61>tres pass<73>s <20> \texttt{set} sont, dans l'ordre, la cl<63>, un flag de
|
|
|
|
|
contr<74>le, la dur<75>e de vie de l'entr<74>e (elle sera supprim<69>e au-del<65>), la
|
|
|
|
|
taille de la valeur <20> stocker (en octets), et enfin la valeur (apr<70>s un
|
|
|
|
|
retour <20> la ligne).
|
|
|
|
|
\item R<>cup<75>rer une valeur:
|
|
|
|
|
\begin{verbatim}get greeting
|
|
|
|
|
VALUE greeting 1 11
|
|
|
|
|
Hello world
|
|
|
|
|
END \end{verbatim}
|
|
|
|
|
\item Statistiques sur les entr<74>es stock<63>es:
|
|
|
|
|
\begin{verbatim}stats items
|
|
|
|
|
STAT items:1:number 1
|
|
|
|
|
STAT items:1:age 1397
|
|
|
|
|
STAT items:1:evicted 0
|
|
|
|
|
STAT items:1:evicted_nonzero 0
|
|
|
|
|
STAT items:1:evicted_time 0
|
|
|
|
|
STAT items:1:outofmemory 0
|
|
|
|
|
STAT items:1:tailrepairs 0
|
|
|
|
|
STAT items:1:reclaimed 0
|
|
|
|
|
END\end{verbatim}
|
|
|
|
|
\end{itemize}
|
|
|
|
|
|