2015-08-29 2 views
5

après avoir investi quelques jours maintenant comprendre pourquoi ma deuxième configuration de cache de niveau pour la doctrine ne fonctionne pas, j'espère que quelqu'un pourrait être en mesure de soutenir. À l'heure actuelle, aucun appel de cache de second niveau n'aboutit à un appel.Doctrine cache de second niveau w/Redis

Mon projet est actuellement mis en place avec les packages suivants (+ d'autres qui ne sont probablement pas pertinents pour cette configuration):

"symfony/symfony": "2.6.*", 
"doctrine/orm": "2.*", 
"doctrine/dbal": "2.*", 
"doctrine/doctrine-bundle": "~1.2" 
... 
"snc/redis-bundle": "1.*" 

Le cache Doctrine est configuré de la façon suivante:

orm: 
    auto_generate_proxy_classes: "%kernel.debug%" 
    auto_mapping: true 
    metadata_cache_driver: redis 
    query_cache_driver:  redis 
    result_cache_driver: redis 
    second_level_cache: 
     enabled:   true 
     log_enabled:  true 

les métadonnées & cache de requête semble fonctionner correctement, car il y a des clés créées au sein Redis et la SNC Redis Bundle enregistre aussi bien mes coups de cache. Mais le « Cache 2 litres » enregistre juste misses et met, au lieu de hits:

no 2l cache hits

Au cours de ma mise au point, j'ai découvert que dans les demandes de cache de la Doctrine/ORM/Requête essayer d'accéder au ArrayCache à la place du pilote de cache configuré.

Il pourrait déjà aider si quelqu'un a une configuration exemple de travail pour le cache de second niveau car il ne fonctionne avec Redis pour moi, ni pour UCPA ou memcached.

J'espère que quelqu'un a une idée ou peut simplement partager sa configuration de travail.

Merci à l'avance & meilleures salutations

+0

On dirait que personne ne sait comment utiliser SncRedisBundle avec de la doctrine cache de second niveau, si possible du tout pair. –

Répondre

5

Ok, donc j'ai finalement obtenu la réponse à cette après environ un mois! Veuillez noter que Doctrine a un support natif pour beaucoup de pilotes de cache, y compris redis mais, dans mon cas, probablement aussi dans le cas de l'OP, je devais le faire fonctionner avec SncRedisBundle afin de profiter de la réplication Redis Master-Slave et/ou Clustering.

J'ai eu ma réponse avec des commentaires utiles sur Github ici https://github.com/snc/SncRedisBundle/issues/216

Fondamentalement, vous devez créer un service qui est essentiellement quelques lignes de code dans services.yml

.... 
services: 
    snc_second_level_cache: 
     class: %snc_redis.doctrine_cache.class% 
     calls: 
      - ["setRedis", ["@snc_redis.cache"]] 
      - ["setNamespace", ["DoctrineSecondLevelCache"]] #Optional 
.... 

puis dans votre config. yml

.... 
orm: 
    entity_managers: 
     default: 
      second_level_cache: 
       region_cache_driver: 
        type: service 
        id: snc_second_level_cache 
       enabled: true 
.... 

C'est tout, profitez!

Mise à jour - 19 janvier 2016

À partir d'aujourd'hui, SncRedisBundle branche dev-master est désormais compatible et est livré avec un support intégré pour Doctrine cache de second niveau

+0

Pourriez-vous partager un exemple de l'intégration de SncRedisBundle avec Doctrine Second Level Cache? THX! – LaurentG

1

Vous devez également activer la cache_driver correcte du cache de second niveau:

second_level_cache: 
     region_cache_driver: 
      type:     service 
      id:     doctrine_cache.providers.second_level 
     enabled:    true 
     regions: 
      region_name: 
       cache_driver: 
        type:     service 
        id:     doctrine_cache.providers.second_level 

ceci est un exemple conjointement avec DoctrineCacheBundle.