2012-05-21 18:52:07 +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 { Redis}
Site officiel: \url { http://redis.io/}
\section { Pr<EFBFBD> sentation}
Redis est un jeune projet (premi<6D> re version sortie en 2009) de syst<73> me de
gestion de bases de donn<6E> es no-SQL (\emph { Not Only SQL} ) de type cl<63> -valeur. Il
est <20> crit en C et son but est d'<27> tre hautement performant.\\
Les donn<6E> es stock<63> es peuvent <20> tre des chaines de caract<63> res, tableaux, listes,
etc\dots
Une caract<63> ristique notable de Redis est que tout est stock<63> dans la RAM. Des
2012-05-22 03:42:54 +02:00
synchronisations sont faites de mani<6E> re r<> guli<6C> re sur le disque afin de rendre
2012-05-21 18:52:07 +02:00
les donn<6E> es persistantes.
\section { Installation}
Sous Debian Squeeze, la version 1.2.6 est pr<70> sente dans les d<> p<EFBFBD> ts, et peut
<EFBFBD> tre install<6C> e simplement:
\begin { verbatim}
# aptitude install redis-server
\end { verbatim}
Cependant, il peut <20> tre utile d'avoir une version plus r<> cente, et on peut
utiliser un backport du paquet qui fourni la version 2.4.2. Pour cela, si ce
n'est pas le cas, il faut ajouter le d<> p<EFBFBD> t backport au \texttt { sources.list} :
\begin { verbatim}
deb http://backports.debian.org/debian-backports squeeze-backports main
\end { verbatim}
Pour s'assurer d'avoir les mises <20> jour ult<6C> rieures sur le paquet
\texttt { redis-server} , il est n<> cessaire de rajouter dans le fichier
\texttt { /etc/apt/preferences.d/redis} :
\begin { verbatim} Package: redis-server
Pin: release a=squeeze-backports
Pin-Priority: 999
\end { verbatim}
\section { Configuration}
La configuration de Redis se fait dans le fichier
\texttt { /etc/redis/redis.conf} , dont voici un exemple:
\begin { verbatim}
daemonize yes
pidfile /var/run/redis.pid
port 6379
unixsocket /var/run/redis/redis.sock
bind 127.0.0.1
timeout 300
loglevel notice
logfile /var/log/redis/redis-server.log
databases 16
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
dir /var/lib/redis
#requirepass <password>
maxclients 128
maxmemory 104857600
\end { verbatim}
\section { S<EFBFBD> curit<EFBFBD> }
Il faut bien faire attention <20> restreindre l'acc<63> s aux donn<6E> es stock<63> es dans les
bases de donn<6E> es Redis. Par d<> faut, aucune authentification n'est configur<75> e.
Redis peut <20> tre configur<75> pour <20> couter soit sur un socket r<> seau (par d<> faut
\texttt { 127.0.0.1:6379} ) soit via un socket unix. Dans le second cas, il est
ais<EFBFBD> de positionner les bons droits unix sur le socket pour restreindre l'acc<63> s
<EFBFBD> tout le monde. Pour cette raison, il est pr<70> f<EFBFBD> rable de faire <20> couter Redis sur
un socket unix.\\
Si le choix ne peut se poser et que Redis doit obligatoirement <20> couter sur un
socket r<> seau (en local ou non), il est important de configurer une
authentification sur les bases de donn<6E> es.
Redis impl<70> mente une couche d'authentification extr<74> mement minimaliste: pas de
gestion de comptes, mais un unique mot de passe d<> fini en clair dans le fichier
de configuration de Redis. Il sera alors n<> cessaire, apr<70> s chaque connexion <20> la
base, d'ex<65> cuter la commande Redis \texttt { AUTH} suivie du mot de passe.
2012-05-21 23:48:06 +02:00
<EFBFBD> tant donn<6E> que Redis est capable de traiter un nombre tr<74> s <20> lev<65> de requ<71> tes par seconde, les attaques par brute-force se font plus rapide et il est donc conseill<6C> de d<> finir un mot de passe tr<74> s long.
2012-05-21 18:52:07 +02:00
\section { Utilisation}
Voici un aper<65> u de l'utilisation de Redis:
\begin { itemize}
\item Connexion au serveur (via un socket unix):
\begin { verbatim} $ redis - cli - s / var / run / redis / redis.sock \end { verbatim }
\item Ajout d'une entr<74> e:
\begin { verbatim} redis> set foo 3
OK\end { verbatim}
2012-05-21 23:48:06 +02:00
\item Ajout de plusieurs entr<74> es:
2012-05-21 18:52:07 +02:00
\begin { verbatim} redis> mset un 1 deux 2 trois 3 quatre 4
OK\end { verbatim}
\item R<> cup<75> ration d'une entr<74> e:
\begin { verbatim} redis> get foo
(nil)\end { verbatim}
2012-05-21 23:48:06 +02:00
\item Listage des cl<63> s:
2012-05-21 18:52:07 +02:00
\begin { verbatim} redis> keys *
1) "un"
2) "foo"
3) "deux"
4) "trois"
5) "quatre"\end { verbatim}
\item R<> cup<75> ration des entr<74> es qui contiennent \emph { r} :
\begin { verbatim} redis> *keys *r*
1) "quatre"
2) "trois"\end { verbatim}
\end { itemize}
\section { Sauvegardes}
Redis sauvegarde r<> guli<6C> rement le contenu de sa base de donn<6E> e (en RAM) sur le
disque, dans le seul fichier \texttt { /var/lib/redis/dump.rdb} (par d<> faut). Il
suffit donc de copier ce fichier pour en faire une sauvegarde.
La restauration consiste <20> <20> teindre Redis, copier le fichier sauvegard<72> <20> son
bon emplacement, et red<65> marrer Redis.
\section { R<EFBFBD> plication}
\subsection { Fonctionnement}
Redis supporte la r<> plication master-slaves, avec quelques caract<63> ristiques
int<EFBFBD> ressantes: un master peut avoir plusieurs slave, et un slave peut <20> tre
master d'un autre slave (ce qui permet de faire de la r<> plication
cascad<EFBFBD> e).
2012-05-21 23:48:06 +02:00
Apr<EFBFBD> s sa mise en place, la r<> plication se passe en deux temps. Premi<6D> rement, le
2012-05-21 18:52:07 +02:00
master va envoyer l'int<6E> gralit<69> de sa base de donn<6E> es au(x) slave(s). Les
2012-05-21 23:48:06 +02:00
donn<EFBFBD> es seront alors cr<63> <72> s sur le disque, puis charg<72> es en m<> moire. Une fois que
2012-05-21 18:52:07 +02:00
les donn<6E> es sont identiques entre le master et le(s) slave(s), le master
transmet au(x) slave(s) les modifications qui sont effectu<74> es. Les commandes
transmises sont les m<> mes que pour interagir avec le master.
\subsection { Configuration}
La mise en place de la r<> plication est extr<74> mement simple: il suffit de rajouter
la directive \texttt { slaveof <IP> <port>} dans la configuration de Redis, en
prenant bien s<> r soin d'adapter l'IP et le port du master.
Si le master demande une authentification (ce qui devrait <20> tre le cas si il est
correctement configur<75> ), il faut ajouter la directive \texttt { masterauth
<password>} , avec le mot de passe du master.