Intégration de Memcached avec Symfony2

Symfony 2 est livré avec la librairie Doctrine, qui inclut le système de cache.
Pour ce tutorial on va implémenter le driver memcached du package Doctrine\Common\Cache (à remarquer bien memcache"d").
Memcached est un système d'usage général servant à gérer la mémoire cache distribuée. Il est souvent utilisé pour augmenter la vitesse de réponse des sites web créés à partir de bases de données. Il gère les données et les objets en RAM de façon à réduire le nombre de fois qu'une même donnée stockée dans un périphérique externe est lue. Il tourne sous Unix, Windows et MacOS et est distribué selon les termes d'une licence libre dite permissive.[wikipedia]


Installation Memcached:
Tout d'abord, on installe memcached dans notre serveur:
apt-get install memcached php5-memcached
Le port par défaut est 11211. Un redémarrage d'Apache sera fait automatiquement. Pour vérifier le bon fonctionnement de memcached :
netstat -tap | grep memcached
Pour obtenir quelques choses qui ressemblent à ce-ci
tcp        0      0 localhost:11211         *:*                     LISTEN      17495/memcached
tcp        0      0 localhost:11211         localhost:48696         ESTABLISHED 17495/memcached


Implémentation :
Dans le fichier de config.yml
services:
   memcached:
       class: Memcached
       calls:
           - [ addServer, ['localhost', 11211] ]
   memcached_cache:
       class: Doctrine\Common\Cache\MemcachedCache
       calls:
           - [ setMemcached, [@memcached] ]


Dans le controlleur:
<?php
namespace Simuleo\AdminBundle\Controller;
class FirstServiceRestController extends Controller implements ContainerAwareInterface{

   public function getMateriauAction(){
       $cache = $this->container->get('memcached_cache');
       $cache_key = 'materiau_unique_cache_id';
       $cached_data = $cache->fetch($cache_key);
       if (false === $cached_data) {
           $materiau = $this->get('simuleo_admin.materiau_manager')->loadAll();
           if(!$materiau){
               throw $this->createNotFoundException("Aucun materiau");
           }
           $cache->save($cache_key, $materiau, 3600);//TTL 1h
           return $materiau;
       }
       return $cached_data;
   }
}


On précise un id pour le cache, lors de l’invocation de cette fonction, on vérifie si un objet est caché avec l’id précisé, si OUI on affiche directement du cache, si NON on affiche le retour de la requête passée à la base de donnée.


Pour effacer un cache spécifique on peut faire :
$cache->delete($cache_key);
Ou vider tout cache par:
nc localhost 11211
flush_all

Voir plus :
http://doctrine-orm.readthedocs.org/en/latest/reference/caching.html

Commentaires

Posts les plus consultés de ce blog

[Solr 4.7] : Installation, Configuration , Manipulation

[Solr 4.7 avancé]: Intégration avec Symfony 2

تحدي‬‫ الناجين Survivor Challenge