<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>The Tech Guy FR &#187; cache</title>
	<atom:link href="http://blog.juliencrouzet.fr/tag/cache/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.juliencrouzet.fr</link>
	<description>Le blog de Julien CROUZET</description>
	<lastBuildDate>Thu, 01 Jul 2010 19:38:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>redis : Le système de cache parfait</title>
		<link>http://blog.juliencrouzet.fr/484/redis-le-systeme-de-cache-parfait/</link>
		<comments>http://blog.juliencrouzet.fr/484/redis-le-systeme-de-cache-parfait/#comments</comments>
		<pubDate>Sat, 29 Aug 2009 17:11:14 +0000</pubDate>
		<dc:creator>c2c</dc:creator>
				<category><![CDATA[cache]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://blog.juliencrouzet.fr/?p=484</guid>
		<description><![CDATA[
Warning: call_user_func_array() expects parameter 1 to be a valid callback, first array member is not a valid class name or object in /home/www/blog.juliencrouzet.fr/wp-includes/plugin.php on line 166

Call Stack:
    0.0001     623456   1. {main}() /home/www/blog.juliencrouzet.fr/index.php:0
    0.0002     628984   2. require('/home/www/blog.juliencrouzet.fr/wp-blog-header.php') /home/www/blog.juliencrouzet.fr/index.php:17
    0.1971   37688984   3. require_once('/home/www/blog.juliencrouzet.fr/wp-includes/template-loader.php') /home/www/blog.juliencrouzet.fr/wp-blog-header.php:16
    0.1980   37691904   4. do_feed() /home/www/blog.juliencrouzet.fr/wp-includes/template-loader.php:14
    0.1980   37692184   5. do_action() /home/www/blog.juliencrouzet.fr/wp-includes/functions.php:1721
    0.1980   37694208   6. call_user_func_array() /home/www/blog.juliencrouzet.fr/wp-includes/plugin.php:395
    0.1980   37694264   7. do_feed_rss2() /home/www/blog.juliencrouzet.fr/wp-includes/plugin.php:0
    0.1980   37694456   8. load_template() /home/www/blog.juliencrouzet.fr/wp-includes/functions.php:1753
    0.1982   37756600   9. require_once('/home/www/blog.juliencrouzet.fr/wp-includes/feed-rss2.php') /home/www/blog.juliencrouzet.fr/wp-includes/theme.php:1087
    0.2032   37841144  10. the_excerpt_rss() /home/www/blog.juliencrouzet.fr/wp-includes/feed-rss2.php:46
    0.2091   37844688  11. apply_filters() /home/www/blog.juliencrouzet.fr/wp-includes/feed.php:177
    0.2094   37847320  12. call_user_func_array() /home/www/blog.juliencrouzet.fr/wp-includes/plugin.php:166

]]></description>
			<content:encoded><![CDATA[<div id="attachment_485" class="wp-caption aligncenter" style="width: 171px"><a href="http://blog.juliencrouzet.fr/wp-content/uploads/2009/08/bolt.jpg" rel="lightbox[484]"><img class="size-medium wp-image-485" title="bolt" src="http://blog.juliencrouzet.fr/wp-content/uploads/2009/08/bolt-300x243.jpg" alt="Il les surpasse tous !" width="161" height="131" /></a><p class="wp-caption-text">Il les surpasse tous !</p></div>
<p>Après 3 ans d&#8217;une histoire d&#8217;amour fidèle avec <a href="http://www.danga.com/memcached/">Memcached</a> ; le serveur de cache notamment utilisé par <a href="http://www.facebook.com/note.php?note_id=39391378919">Facebook</a>, <a href="http://video.google.com/videoplay?docid=-6304964351441328559">Youtube</a> ou <a href="http://blog.twitter.com/2008/05/its-not-rocket-science-but-its-our-work.html">Twitter </a>; je suis au bord de la rupture après avoir rencontré <a href="http://code.google.com/p/redis/">redis</a>.<br />
<span id="more-484"></span></p>
<h2>redis, A persistent key-value <em>database</em></h2>
<p>Oui, <strong>database</strong>. En fait, redis, c&#8217;est les avantage d&#8217;un système de cache sans les inconvénients.</p>
<p>D&#8217;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.</p>
<p>Ce point n&#8217;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).</p>
<p><a href="http://code.google.com/p/redis/">redis</a> 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 !</p>
<p>A noter cependant que Memcache existe en version persistante (<a href="http://memcachedb.org/">MemcachedDB</a>), cependant on il ne fait QUE du stockage persistant, on perd donc en performance.</p>
<h2>Des performances impressionnantes</h2>
<p>Afin de comparer les performances de Memcached, réputé et reconnu pour sa rapidité, et celles de redis, j&#8217;ai fait un simple test pour Memcache :</p>
<p>Et pour redis :</p>
<p>Résultat : Avec redis on est en moyenne à 2,507 secondes pour 10 000 itérations, pour Memcached on est à 3,669 secondes.</p>
<p>redis est donc plus rapides que Memcached sur des opérations de bases (écriture, lecture) il fallait le faire !</p>
<p>Sinon pour être un peu plus complet, une page de <a href="http://code.google.com/p/redis/wiki/Benchmarks">benchmark </a>est présente sur le site.</p>
<h2>Au delà du stockage <em>&laquo;&nbsp;clé-chaîne&nbsp;&raquo;</em></h2>
<p>Un autre inconvénient de Memcached ou d&#8217;autres système de cache, c&#8217;est qu&#8217;il fonctionne sur un modèle &laquo;&nbsp;<em>clé-chaîne de caractère</em>&laquo;&nbsp;, il ne peut donc stocker que des combinaisons du type (&#8216;clé de cache&#8217;, &#8216;valeur à stocker&#8217;).</p>
<p>Lorsque l&#8217;on doit enregistrer des données plus complexes comme des tableaux, on est alors obligé de passer par une mécanique de <a href="http://fr.wikipedia.org/wiki/S%C3%A9rialisation">sérialisation des données ou Mashalling</a>, comme <a href="http://fr3.php.net/serialize">serialize</a>() en PHP.</p>
<p>redis permet en plus du mode de stockage &laquo;&nbsp;<em>clé-chaîne</em>&nbsp;&raquo; un mode de stockage &laquo;&nbsp;<em>clé-liste</em>&nbsp;&raquo; qui permet de stocker des listes. Il est donc possible, au delà de stocker et récupérer des valeurs, d&#8217;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&#8217;est le cas avec les autres systèmes.</p>
<p>Ceci est un gain énorme de ressources système et de temps tout en simplifiant la gestion du cache !</p>
<h2>Multiple bases de donnée</h2>
<p>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é &#8216;UsersCount&#8217; sera nommée &#8216;MyApplication_UsersCount&#8217; pour éviter d&#8217;écraser une clé d&#8217;une autre application.</p>
<p>redis offre une gestion par &laquo;&nbsp;base de donnée&nbsp;&raquo; comme le font les base de données classiques ; ce qui permet entre autre de vider le cache d&#8217;une application sans effacer les autres données ou de lister rapidement les données en cache d&#8217;une application donnée.</p>
<h2>Implémentation langages</h2>
<p>Pour utiliser redis il existe des libraries ou classe en Ruby, Python, PHP, Perl, Java, etc. ; la liste est présente sur le <a href="http://code.google.com/p/redis/">site du projet</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.juliencrouzet.fr/484/redis-le-systeme-de-cache-parfait/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
