msgbartop
Le blog de Julien CROUZET
msgbarbottom

29 août 09 redis : Le système de cache parfait

Il les surpasse tous !

Il les surpasse tous !

Après 3 ans d’une histoire d’amour fidèle avec Memcached ; le serveur de cache notamment utilisé par Facebook, Youtube ou Twitter ; je suis au bord de la rupture après avoir rencontré redis.

redis, A persistent key-value database

Oui, database. En fait, redis, c’est les avantage d’un système de cache sans les inconvénients.

D’habitude avec les systèmes de caches comme Memcached, les données mises en cache sont volatiles. Elles sont stockées en mémoire pendant un certain temps ; passé ce délais elles sont supprimées.

Ce point n’est pas bloquant, une données mise en cache doit pouvoir être recalculée ou récupérée à tout moment, mais cela consomme des ressources en plus (pour récupérer cette donnée, justement).

redis est conçu sur un autre modèle. Les données sont dans un premier temps stockées en mémoire de la même manière que les autres, mais elles sont de manière cycliques (tout les X écritures ou après X temps) écrites sur le disque dur. On peut donc stocker une donnée de manière permanente !

A noter cependant que Memcache existe en version persistante (MemcachedDB), cependant on il ne fait QUE du stockage persistant, on perd donc en performance.

Des performances impressionnantes

Afin de comparer les performances de Memcached, réputé et reconnu pour sa rapidité, et celles de redis, j’ai fait un simple test pour Memcache :

Et pour redis :

Résultat : Avec redis on est en moyenne à 2,507 secondes pour 10 000 itérations, pour Memcached on est à 3,669 secondes.

redis est donc plus rapides que Memcached sur des opérations de bases (écriture, lecture) il fallait le faire !

Sinon pour être un peu plus complet, une page de benchmark est présente sur le site.

Au delà du stockage « clé-chaîne »

Un autre inconvénient de Memcached ou d’autres système de cache, c’est qu’il fonctionne sur un modèle « clé-chaîne de caractère« , il ne peut donc stocker que des combinaisons du type (‘clé de cache’, ‘valeur à stocker’).

Lorsque l’on doit enregistrer des données plus complexes comme des tableaux, on est alors obligé de passer par une mécanique de sérialisation des données ou Mashalling, comme serialize() en PHP.

redis permet en plus du mode de stockage « clé-chaîne » un mode de stockage « clé-liste » qui permet de stocker des listes. Il est donc possible, au delà de stocker et récupérer des valeurs, d’utiliser les fonctions classiques de listes, comme changer une valeur dans cette liste, récupérer une valeur ou un ensemble de valeur dans la liste, la modifier etc. et ce sans avoir à récupérer la liste, la modifier et la renvoyer comme c’est le cas avec les autres systèmes.

Ceci est un gain énorme de ressources système et de temps tout en simplifiant la gestion du cache !

Multiple bases de donnée

Un même serveur de cache peut être utilisé par plusieurs systèmes de cache. Souvent cela est problématique car les données ne sont pas séparées par application. On utilise alors souvent un système de préfixage des clés, par exemple la clé ‘UsersCount’ sera nommée ‘MyApplication_UsersCount’ pour éviter d’écraser une clé d’une autre application.

redis offre une gestion par « base de donnée » comme le font les base de données classiques ; ce qui permet entre autre de vider le cache d’une application sans effacer les autres données ou de lister rapidement les données en cache d’une application donnée.

Implémentation langages

Pour utiliser redis il existe des libraries ou classe en Ruby, Python, PHP, Perl, Java, etc. ; la liste est présente sur le site du projet.

Buzz it!

Tags: , ,

Laisser un commentaire