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
Enregistrer un commentaire