{"id":21,"date":"2007-01-31T12:37:00","date_gmt":"2007-01-31T12:37:00","guid":{"rendered":"http:\/\/www.olivierdoucet.info\/wordpress\/?p=21"},"modified":"2007-01-31T12:37:00","modified_gmt":"2007-01-31T12:37:00","slug":"approche-de-memcache-avec-php","status":"publish","type":"post","link":"https:\/\/www.olivierdoucet.info\/blog\/2007\/01\/31\/approche-de-memcache-avec-php\/","title":{"rendered":"Approche de Memcache avec PHP"},"content":{"rendered":"<p>Memcache est un module PHP additionnel. C&rsquo;est un \u00ab\u00a0serveur de cache\u00a0\u00bb. Il s&rsquo;agit d&rsquo;un d\u00e9mon UNIX qui tourne sur un serveur et qui enregistre\/sert tout type de variable. Voici un aper\u00e7u assez complet de son utilisation. Je ne vais pas expliquer son installation, puisque tout est expliqu\u00e9 tr\u00e8s clairement sur la <a href=\"http:\/\/fr.php.net\/manual\/fr\/ref.memcache.php\" hreflang=\"fr\">documentation de PHP<\/a>.<\/p>\n<p><!--more--><\/p>\n<p>Vous pouvez passer depuis PHP tous types de variables, puisque le module s&rsquo;occupe de s\u00e9rialiser les \u00e9l\u00e9ments non g\u00e9r\u00e9s en natif par memcache (soit tout ce qui n&rsquo;est ni un chiffre ni une chaine de caract\u00e8re). Vous pouvez donc vous servir de memcache pour mettre en cache un nombre, une chaine de caract\u00e8re, un tableau ou un objet.<\/p>\n<p>Vous pouvez g\u00e9rer un pool de serveur Memcache avec le module PHP. Si un serveur est inaccessible, la librairie ira automatiquement se connecter \u00e0 un autre serveur. Cette partie est donc totalement externalis\u00e9e et vous n&rsquo;aurez donc pas \u00e0 vous en occuper depuis PHP (ou presque).<\/p>\n<p>Voici comment s&rsquo;utilise Memcache point par point. Je travaillerais uniquement avec l&rsquo;approche objet \ud83d\ude09 <\/p>\n<h2>Cr\u00e9ation de l&rsquo;objet memcache<\/h2>\n<p><code>$memcache = new Memcache();<\/code><\/p>\n<p>Si vous voulez vraiment configurer memcache jusque dans les moindres d\u00e9tails, regardez les options disponibles dans php.ini&nbsp;:<\/p>\n<p><em>memcache.allow_failover<\/em> A laisser \u00e0 1 si vous allez utiliser plusieurs serveurs Memcache<\/p>\n<p><em>memcache.chunk_size<\/em> Configuration r\u00e9seau (taille des paquets). Je vous laisse choisir la meilleure valeur \ud83d\ude42<\/p>\n<p><em>memcache.default_port<\/em> Port par d\u00e9faut<\/p>\n<h2>D\u00e9finition des serveurs memcache existants<\/h2>\n<p>Il y a deux approches pour se connecter \u00e0 Memcache. Tout d&rsquo;abord en multi-serveur&nbsp;:<\/p>\n<p><code>$memcache = new Memcache();<\/code>&nbsp;<\/p>\n<p><code>$memcache-&gt;addServer('memcache_host', 11211);<\/code>&nbsp;<\/p>\n<p><code>$memcache-&gt;addServer('memcache_host2', 11211);<\/code><\/p>\n<p>Dans ce cas, n&rsquo;utilisez PAS Memcache::Connect() qui va r\u00e9initialiser la liste de serveurs disponibles. Il vous suffit de faire vos Get, Set et Add, le module s&rsquo;occupe de se connecter ou r\u00e9initialiser une connection si besoin est.<\/p>\n<h2>Enregistrement d&rsquo;une variable dans Memcache<\/h2>\n<p>Une fois la connexion \u00e9tablie, enregistrons une variable toute b\u00eate&nbsp;:<\/p>\n<p><code>$memcache_obj-&gt;add('var_key', 'test variable', false, 30);<\/code><\/p>\n<ul>\n<li>Premier argument&nbsp;: le nom de la variable&nbsp;<\/li>\n<li>Deuxi\u00e8me argument&nbsp;: la valeur de la variable&nbsp;<\/li>\n<li>Troisi\u00e8me argument (facultatif)&nbsp;: si il faut compresser la variable avec zlib. Si oui, passez la constante MEMCACHE_COMPRESSED ici.&nbsp;<\/li>\n<li>Dernier argument&nbsp;: temps de vie de la variable. Si 0, alors la variable n&rsquo;expire jamais. Vous pouvez \u00e9galement d\u00e9finir un timestamp unix, ou le nombre de secondes \u00e0 partir de maintenant. Dans ce dernier cas, la valeur ne doit pas d\u00e9passer 30 jours soit 2592000 secondes.<\/li>\n<\/ul>\n<p>Attention \u00e0 la dur\u00e9e de vie du cache&nbsp;: rien ne garantit que la variable va rester tout ce temps. En effet, si le d\u00e9mon Memcache n&rsquo;a pas assez de m\u00e9moire, il va supprimer les variables les plus anciennes pour pouvoir enregistrer les nouvelles.<\/p>\n<p>Il existe \u00e9galement la fonction set() qui fait la m\u00eame chose que add, mais qui remplace la variable si elle existe d\u00e9j\u00e0, alors que add renvoie une erreur en cas de doublon. Enfin replace() qui est comme set() mais renvoie une erreur si la variable n&rsquo;existe pas.<\/p>\n<h2>R\u00e9cup\u00e9ration de donn\u00e9es<\/h2>\n<p>On passe par la fonction Get.&nbsp;<\/p>\n<p><code>$var = $memcache_obj-&gt;get('some_key');<\/code><\/p>\n<p>Petite astuce&nbsp;: si vous allez avoir besoin de plusieurs variables, vous pouvez passer un tableau de clefs&nbsp;:<\/p>\n<p><code>$var = $memcache_obj-&gt;get(Array('some_key', 'second_key'));<\/code><\/p>\n<h2>Incr\u00e9menter\/d\u00e9cr\u00e9menter<\/h2>\n<p>A noter la pr\u00e9sence de fonctions propres au stockage de nombres&nbsp;: incr\u00e9mentation du compteur de 3:&nbsp;<\/p>\n<p><code>$current_value = $memcache_obj-&gt;increment('counter', 3);<\/code><\/p>\n<p>incr\u00e9mentation du compteur de 1:&nbsp;<\/p>\n<p><code>$current_value = $memcache_obj-&gt;increment('counter');<\/code><\/p>\n<p>M\u00eame principe avec decrement() \ud83d\ude42<\/p>\n<p>Attention&nbsp;: ne marche pas avec les donn\u00e9es compress\u00e9es (cf 3e argument de Set() )&nbsp;!<\/p>\n<h2>Fonctionnalit\u00e9s avanc\u00e9es<\/h2>\n<p>Je pr\u00e9sente rapidement les autres fonctions&nbsp;:<\/p>\n<p><code> $stats = $memcache_obj-&gt;getStats();<\/code>&nbsp;<\/p>\n<p>et&nbsp;<\/p>\n<p><code>$stats = $memcache_obj-&gt;getExtendedStats();<\/code><\/p>\n<p>Qui renvoie un tableau avec des statistiques sur le serveur&nbsp;: octets \u00e9chang\u00e9s, charge, etc. Ca peut servir lors du d\u00e9veloppement mais c&rsquo;est inutile en production  (sauf si vous mettez en place un systeme pouss\u00e9 de pond\u00e9ration des serveurs Memcache en fonction de la charge sur chacun &#8230;).<\/p>\n<p><code> $memcache_obj-&gt;setCompressThreshold(20000, 0.2);<\/code><\/p>\n<p>Pour activer la compression automatique des variables plus grosses que X octets, X \u00e9tant le premier argument.<\/p>\n<p>Voil\u00e0 c&rsquo;est tout pour cette premi\u00e8re approche. Je vous posterais bient\u00f4t des tests de performance de Memcache.<\/p>\n<p>N&rsquo;h\u00e9sitez pas \u00e0 poser toutes vos questions sur ce module dans les commentaires&nbsp;!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Memcache est un module PHP additionnel. C&rsquo;est un \u00ab\u00a0serveur de cache\u00a0\u00bb. Il s&rsquo;agit d&rsquo;un d\u00e9mon UNIX qui tourne sur un serveur et qui enregistre\/sert tout type de variable. Voici un aper\u00e7u assez complet de son utilisation. Je ne vais pas expliquer son installation, puisque tout est expliqu\u00e9 tr\u00e8s clairement sur la <a href=\"http:\/\/fr.php.net\/manual\/fr\/ref.memcache.php\" hreflang=\"fr\">documentation de PHP<\/a>.<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[28,29],"class_list":["post-21","post","type-post","status-publish","format-standard","hentry","category-informatique","tag-memcache","tag-php"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Approche de Memcache avec PHP - My thoughts<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.olivierdoucet.info\/blog\/2007\/01\/31\/approche-de-memcache-avec-php\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Approche de Memcache avec PHP - My thoughts\" \/>\n<meta property=\"og:description\" content=\"Memcache est un module PHP additionnel. C&#039;est un &quot;serveur de cache&quot;. Il s&#039;agit d&#039;un d\u00e9mon UNIX qui tourne sur un serveur et qui enregistre\/sert tout type de variable. Voici un aper\u00e7u assez complet de son utilisation. Je ne vais pas expliquer son installation, puisque tout est expliqu\u00e9 tr\u00e8s clairement sur la documentation de PHP.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.olivierdoucet.info\/blog\/2007\/01\/31\/approche-de-memcache-avec-php\/\" \/>\n<meta property=\"og:site_name\" content=\"My thoughts\" \/>\n<meta property=\"article:published_time\" content=\"2007-01-31T12:37:00+00:00\" \/>\n<meta name=\"author\" content=\"olivier\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@odoucet\" \/>\n<meta name=\"twitter:site\" content=\"@odoucet\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"olivier\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.olivierdoucet.info\/blog\/2007\/01\/31\/approche-de-memcache-avec-php\/\",\"url\":\"https:\/\/www.olivierdoucet.info\/blog\/2007\/01\/31\/approche-de-memcache-avec-php\/\",\"name\":\"Approche de Memcache avec PHP - My thoughts\",\"isPartOf\":{\"@id\":\"https:\/\/www.olivierdoucet.info\/blog\/#website\"},\"datePublished\":\"2007-01-31T12:37:00+00:00\",\"author\":{\"@id\":\"https:\/\/www.olivierdoucet.info\/blog\/#\/schema\/person\/2a02230ae6aeac086b3379e5853c6f96\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.olivierdoucet.info\/blog\/2007\/01\/31\/approche-de-memcache-avec-php\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.olivierdoucet.info\/blog\/2007\/01\/31\/approche-de-memcache-avec-php\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.olivierdoucet.info\/blog\/2007\/01\/31\/approche-de-memcache-avec-php\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.olivierdoucet.info\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Approche de Memcache avec PHP\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.olivierdoucet.info\/blog\/#website\",\"url\":\"https:\/\/www.olivierdoucet.info\/blog\/\",\"name\":\"My thoughts\",\"description\":\"En fran\u00e7ais and in english :)\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.olivierdoucet.info\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.olivierdoucet.info\/blog\/#\/schema\/person\/2a02230ae6aeac086b3379e5853c6f96\",\"name\":\"olivier\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/www.olivierdoucet.info\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/febd16d726b2266a512e951d03424de3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/febd16d726b2266a512e951d03424de3?s=96&d=mm&r=g\",\"caption\":\"olivier\"},\"sameAs\":[\"http:\/\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Approche de Memcache avec PHP - My thoughts","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.olivierdoucet.info\/blog\/2007\/01\/31\/approche-de-memcache-avec-php\/","og_locale":"fr_FR","og_type":"article","og_title":"Approche de Memcache avec PHP - My thoughts","og_description":"Memcache est un module PHP additionnel. C'est un \"serveur de cache\". Il s'agit d'un d\u00e9mon UNIX qui tourne sur un serveur et qui enregistre\/sert tout type de variable. Voici un aper\u00e7u assez complet de son utilisation. Je ne vais pas expliquer son installation, puisque tout est expliqu\u00e9 tr\u00e8s clairement sur la documentation de PHP.","og_url":"https:\/\/www.olivierdoucet.info\/blog\/2007\/01\/31\/approche-de-memcache-avec-php\/","og_site_name":"My thoughts","article_published_time":"2007-01-31T12:37:00+00:00","author":"olivier","twitter_card":"summary_large_image","twitter_creator":"@odoucet","twitter_site":"@odoucet","twitter_misc":{"\u00c9crit par":"olivier","Dur\u00e9e de lecture estim\u00e9e":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.olivierdoucet.info\/blog\/2007\/01\/31\/approche-de-memcache-avec-php\/","url":"https:\/\/www.olivierdoucet.info\/blog\/2007\/01\/31\/approche-de-memcache-avec-php\/","name":"Approche de Memcache avec PHP - My thoughts","isPartOf":{"@id":"https:\/\/www.olivierdoucet.info\/blog\/#website"},"datePublished":"2007-01-31T12:37:00+00:00","author":{"@id":"https:\/\/www.olivierdoucet.info\/blog\/#\/schema\/person\/2a02230ae6aeac086b3379e5853c6f96"},"breadcrumb":{"@id":"https:\/\/www.olivierdoucet.info\/blog\/2007\/01\/31\/approche-de-memcache-avec-php\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.olivierdoucet.info\/blog\/2007\/01\/31\/approche-de-memcache-avec-php\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.olivierdoucet.info\/blog\/2007\/01\/31\/approche-de-memcache-avec-php\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.olivierdoucet.info\/blog\/"},{"@type":"ListItem","position":2,"name":"Approche de Memcache avec PHP"}]},{"@type":"WebSite","@id":"https:\/\/www.olivierdoucet.info\/blog\/#website","url":"https:\/\/www.olivierdoucet.info\/blog\/","name":"My thoughts","description":"En fran\u00e7ais and in english :)","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.olivierdoucet.info\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Person","@id":"https:\/\/www.olivierdoucet.info\/blog\/#\/schema\/person\/2a02230ae6aeac086b3379e5853c6f96","name":"olivier","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.olivierdoucet.info\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/febd16d726b2266a512e951d03424de3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/febd16d726b2266a512e951d03424de3?s=96&d=mm&r=g","caption":"olivier"},"sameAs":["http:\/\/"]}]}},"_links":{"self":[{"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/posts\/21","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/comments?post=21"}],"version-history":[{"count":0,"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/posts\/21\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/media?parent=21"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/categories?post=21"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.olivierdoucet.info\/blog\/wp-json\/wp\/v2\/tags?post=21"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}