2013-02-25 1 views
2

J'utilise doctrine 2 sans rien mettre en cache pour le moment. Je voudrais permettre à un système de mise en cache au sein de la doctrine, mais il semble que vous devez gérer manuellement partout:Doctrine - Interrompre le cache des requêtes lorsque l'entité est modifiée (cache de second niveau)

$memcache = new Memcache(); 
$memcache->connect('memcache_host', 11211); 

$cacheDriver = new \Doctrine\Common\Cache\MemcacheCache(); 
$cacheDriver->setMemcache($memcache); 
$cacheDriver->save('cache_id', 'my_data'); 
... 
$cacheDriver->delete('cache_id'); 

Je voudrais savoir si la doctrine pouvait gérer automatiquement. Par exemple:

  1. Le cache est activé, je demande une entité User par id, recherche Doctrine dans son cache, ne peut pas trouver l'utilisateur, le récupérer, il mis dans le cache, le retourner.

  2. Je récupère une seconde fois, Doctrine me renvoie le cache User.

  3. mettre à jour le User (ou l'une de ses relations) Doctrine détecter et briser le cache pour cet objet
  4. Je demande au même User par id, Doctrine ne l'a pas dans le cache plus, et le récupère mis le cache revient à l'utilisateur mis à jour avant de le renvoyer

Est-ce possible?

Cheers, Maxime

Répondre

3

Ce que vous cherchez (dans Doctrine ORM) est pris en charge que dans le resultset cache et applique uniquement aux résultats des requêtes SQL produites par des requêtes DQL.

Le nom exact de la fonction que vous recherchez est "second-level cache", qui ne sont pas encore pris en charge par ORM Doctrine, mais est actuellement en cours d'élaboration (nous l'espérons, sera disponible dans la version 2.5) à https://github.com/doctrine/doctrine2/pull/580

Pour l'instant, devra gérer ce type de mise en cache dans votre propre couche de service si c'est vraiment nécessaire.

+0

Intéressant, compagnon thx;) – maxwell2022

Questions connexes