Je vais décrire ici une technique pour mettre en cache mémoire, à l'aide de memcached les données d'une base mysql sans modifier le code applicatif. La technique consiste à utiliser mysql-proxy et la librairie lua mysql-proxy-cache. Cette description se base sur une Debian Lenny.
On débute par l'installation de memcached
aptitude install memcached
Ensuite nous allons installer les paquets nécessaire pour satisfaire les dépendances de la librairie.
aptitude install lua5.1 liblua5.1-md5-0 liblua5.1-socket2 luarocks
La librairie luamemcached n'est pas actuellement dans les repository officiel mais il existe néanmoins un paquet debian.
wget http://luaforge.net/frs/download.php/4041/liblua5.1-memcached0.deb dpkg -i liblua5.1-memcached0.deb
Pour la librairie mysql-proxy-cache qui nous intéresse ici nous pouvons la récupérer par git ou directement à l'adresse http://github.com/clofresh/mysql-proxy-cache/raw/master/mysql-proxy-cache.lua.
A partir de ce point nous considérons que le fichier lua a été sauvegardé dans /usr/share/mysql-proxy/mysql-proxy-cache.lua
Modifions maintenant le fichier de configuration de mysql-proxy pour que celui-ci se lance au démarrage et qu'il intègre la nouvelle librairie, la configuration se fait dans /etc/default/mysql-proxy.
ENABLED="true" OPTIONS="--proxy-lua-script=/usr/share/mysql-proxy/mysql-proxy-cache.lua"
Il reste à démarrer mysql-proxy avec le script d'init standard
/etc/init.d/mysql-proxy start
C'est désormais opérationnel, par défaut les résultats seront cachés pour une durée de 30 secondes. Le cache n'est pas dynamique dans le sens ou une donnée écrite ne sera pas rendue immédiatement, mais seulement au bout de 30 secondes, prenez garde donc si vous augmentez cette valeur.
Pour vérifier que memcached est bien actif, vous pouvez vous connecter en telnet sur son port d'écoute (11211) et taper la commande stats, vous obtiendrez quelque chose comme :
stats STAT pid 2539 STAT uptime 21318 STAT time 1256336412 STAT version 1.2.2 STAT pointer_size 32 STAT rusage_user 0.040002 STAT rusage_system 0.120007 STAT curr_items 3 STAT total_items 15 STAT bytes 50447 STAT curr_connections 2 STAT total_connections 651 STAT connection_structures 17 STAT cmd_get 1450 STAT cmd_set 15 STAT get_hits 1435 STAT get_misses 15 STAT evictions 0 STAT bytes_read 151263 STAT bytes_written 45156032 STAT limit_maxbytes 67108864 STAT threads 1
Happy hacking !

