Dans un précédent article, j’avais parlé de cacher vos sessions avec Memcached. Ici le principe reste identique, seulement nous utilisons une base de données NoSQL: Redis. Le but de cet article n’est pas de faire une introduction aux bases NoSQL, mais simplement de présenter l’utilisation de Redis dans un contexte avec Magento.
I. À propos de Redis
Le paragraphe qui suit est tiré du livre blanc sur l’introduction aux bases NoSQL de la société Smile. Merci à son auteur Aurélien Foucret.
Long story short, sachez qu’il existe plusieurs types de base NoSQL, on peut en dénombrer 4:
Paradigme clé / valeur
Bases orientées colonnes
Bases documentaires
Bases orientées graphes
Redis se positionne comme une base clé / valeur (key/value). Il s’agit de la catégorie de base NoSQL la plus basique. Ici chaque « objet » est identifié par une clé unique, clé grâce à laquelle celui-ci pourra être requêté. Dans ce modèle on ne dispose généralement que des quatre opérations.
Dans un précédent article, j’avais parlé de cacher vos sessions avec Memcached. Ici le principe reste identique, seulement nous utilisons une base de données NoSQL: Redis. Le but de cet article n’est pas de faire une introduction aux bases NoSQL, mais simplement de présenter l’utilisation de Redis dans un contexte avec Magento.
create : créer un nouvel objet avec sa clé → create(key, value)
read : lit un objet à partir de sa clé → read(key)
update : met à jour la valeur d’un objet à partir de sa clé → update(key, value)
delete: supprime un objet à partir de sa clé → delete(key)
Les bases de ce type disposent pour la plupart d’une interface HTTP REST permettant de procéder très simplement à des requêtes, et ceci depuis n’importe quel langage de développement.
L’approche volontairement très limitée de ces systèmes sur le plan fonctionnel est radicale et leur permet d’afficher des performances exceptionnellement élevées en lecture et en écriture ainsi qu’une scalabilité horizontale considérable. Le besoin de scalabilité verticale est fortement réduit au niveau des bases par le caractère très simple des opérations effectuées.
Ensuite nous appliquons la procédure habituelle d’installation depuis les sources:
user@magento:~$ mkdir redis user@magento:~$ cd redis/ user@magento:~/redis$ wget http://redis.googlecode.com/files/redis-2.4.7.tar.gz --2012-01-31 15:38:29-- http://redis.googlecode.com/files/redis-2.4.7.tar.gz Résolution de redis.googlecode.com... 173.194.65.82 Connexion vers redis.googlecode.com|173.194.65.82|:80...connecté. requête HTTP transmise, en attente de la réponse...200 OK Longueur: 611577 (597K) [application/x-gzip] Sauvegarde en : «redis-2.4.7.tar.gz» 100%[=======================================================================] 611 577 1,03M/s ds 0,6s 2012-01-31 15:38:30 (1,03 MB/s) - «redis-2.4.7.tar.gz» sauvegardé [611577/611577] user@magento:~/redis$ tar xzf redis-2.4.7.tar.gz user@magento:~/redis$ cd redis-2.4.7/ user@magento:~/redis/redis-2.4.7$ make &&make install user@magento~/redis/redis-2.4.7$ cd utils/ user@magento:~/redis/redis-2.4.7/utils$ ./install_server.sh Welcome to the redis service installer This script will help you easily set up a running redis server Please select the redis port for this instance: [6379] Selecting default: 6379 Please select the redis config filename [/etc/redis/6379.conf] Selected default - /etc/redis/6379.conf Please select the redis logfilename [/var/log/redis_6379.log] Selected default - /var/log/redis_6379.log Please select the datadirectoryfor this instance [/var/lib/redis/6379] Selected default - /var/lib/redis/6379 Please select the redis executable path [/usr/local/bin/redis-server] Copied /tmp/6379.conf => /etc/init.d/redis_6379 Installing service... update-rc.d: using dependency based boot sequencing insserv: warning: script 'K02perl-fcgi'missing LSB tags and overrides insserv: warning: script 'redis_6379'missing LSB tags and overrides insserv: warning: script 'perl-fcgi'missing LSB tags and overrides insserv: There is a loopbetween service munin-node and redis_6379 if stopped insserv: loop involving service redis_6379 atdepth2 insserv: loop involving service munin-node atdepth1 insserv: Stopping redis_6379 depends on munin-node and therefore onsystem facility `$all' which can not be true! insserv: exiting now without changing boot order! update-rc.d: error: insserv rejected the script header Starting Redis server... Installation successful!
Nous vérifions que le serveur est bien démarré:
user@magento:~/redis/redis-2.4.7/utils$ lsof -i :6379 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME redis-ser 10137 root 4u IPv4 2429170t0 TCP *:6379 (LISTEN)
La base est-elle fonctionnelle ?
user@magento:/usr/share/munin/plugins$ redis-cli redis 127.0.0.1:6379> ping PONG redis 127.0.0.1:6379> set foo bar OK redis 127.0.0.1:6379> get foo "bar"
Redis fonctionne correctement, passons maintenant à l’installation de la librairie php.
II.2. Installation de la librairie php_redis
Afin de faire communiquer Magento et Redis nous avons besoin d’une librairie php.
Nous clonons le rep Git:
user@magento:~/redis$ mkdir phpredis user@magento:~/redis$ cd phpredis/ user@magento:~/redis/phpredis$ sudo git clone https://github.com/nicolasff/phpredis.git Cloning into phpredis... remote: Counting objects: 2440, done. remote: Compressing objects: 100% (855/855), done. remote: Total 2440 (delta 1638), reused 2361 (delta 1574) Receiving objects: 100% (2440/2440), 530.71 KiB | 401 KiB/s, done. Resolving deltas: 100% (1638/1638), done. user@magento:~/redis/phpredis$ cd phpredis/ user@magento:~/redis/phpredis/phpredis$ sudo apt-get install php5-dev user@magento:~/redis/phpredis/phpredis$ phpize Configuring for: PHP Api Version: 20090626 Zend Module Api No: 20090626 Zend Extension Api No: 220090626 user@magento:~/redis/phpredis/phpredis$ sudo ./configure user@magento:~/redis/phpredis/phpredis$ sudo make && make install
La méthode proposée ici correspond à une installation avec php-fpm, éditons la configuration de php-fpm et ajoutons la nouvelle librairie :
Comments