Mise en place d'un cache objet avec Memcached

21.07.2015
Slides dispo à cette addresse :
http://bit.ly/1JsmOMw

Qui suis-je ?
Cyril Souillard
Architecte Web en Freelance
@CyrilSouillard
Du cache, encore du cache ...

Memcached
- Gratuit & open-source
- Stockage en RAM
- Faible impact sur le CPU
- Configuration très simple
- Scalable

Intégration dans Sf2
Cache driver intégré à Doctrine
LswMemcacheBundle:
- Anti Dog Pile
- Service
- Intégration à la Debug Toolbar
LswMemcacheBundle
lsw_memcache:
pools:
default:
servers:
- { host: 10.0.0.1, tcp_port: 11211, weight: 15 }
- { host: 10.0.0.2, tcp_port: 11211, weight: 30 }
options:
allow_failover: true
max_failover_attempts: 20
session_redundancy: 2
compress_threshold: 20000
lock_timeout: 15
# a lot of other usefull things ;)
sessions:
servers:
- { host: localhost, tcp_port: 11212 }
session:
pool: sessions
doctrine:
result_cache:
pool: default
entity_manager: [default, read]
prefix: "result_"
Configuration
Cas pratique 1/2
#DemoRepository
public function findAll()
{
$qBuilder = $this->em->getManager()
->createQueryBuilder()
->select('d')
->from('AppBundle:Demo', "d");
$data = $qBuilder->getQuery()
->useResultCache(true, 3600, 'mySuperCacheKey')
->getResult();
return $data;
}
mise en pace dans un Repository
Cas pratique 2/2
public function __construct($memcacheService)
{
$this->memcache = $memcacheService;
}
public function getMyData()
{
if(($result = $this->memcache->get('myDataResult')) === false){
// do whatever you want to get the result.
$this->memcache->set('myDataResult', $result, 0, 3600);
}
return $result;
}
mise en pace via le service
Pièges
Invalidation de cache
There are only two hard things in Computer Science: cache invalidation and naming things. Phil Karlton
Proscrire les traitements à partir
de collections cachés
Questions ?
Memcached sf2
By Cyril Souillard
Memcached sf2
Présentation au Sfpot du 21/7/2015
- 914