2015-08-29 2 views
5

после того, как вы потратили несколько дней на то, чтобы выяснить, почему моя конфигурация кэша второго уровня для доктрины не работает, я надеюсь, что кто-то сможет поддержать ее. В настоящий момент никакой вызов кеша второго уровня не приводит к удару.Doctrine Second Level Cache w/Redis

Мой проект в настоящее время созданы следующие пакеты (+ некоторые другие, которые, вероятно, не имеет значения для этой установки):

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

Кэш Доктрина устанавливается следующим образом:

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 

Метаданные &, похоже, работают правильно, поскольку в Redis есть ключи, созданные в Redis, и SNC Redis Bundle также правильно регистрирует мои кеш-хиты. Но «2l Cache» просто регистрирует промахи и путы, вместо просмотра:

no 2l cache hits

Во время моей отладки, я узнал, что в запросах кэша из Доктрины/ОРМ/Query пытаются получить доступ к ArrayCache вместо установленного драйвера кэша.

Возможно, это может помочь, если у кого-то есть рабочая примерная конфигурация для кеша второго уровня, так как она не работает с Redis для меня, ни для APCu, ни для memcached.

Надеюсь, у кого-то есть идея или вы можете просто поделиться своей рабочей конфигурацией.

Спасибо заранее & наилучшими пожеланиями

+0

Похоже, никто не знает, как использовать SncRedisBundle с доктриной-х кеш второго уровня, если это возможно вообще. –

ответ

5

Итак, я наконец получил ответ на этот вопрос примерно через месяц!

Обратите внимание, что Doctrine имеет встроенную поддержку многих драйверов кеша, включая redis, но в моем случае, вероятно, также и в случае OP, мне нужно было заставить его работать с SncRedisBundle, чтобы использовать редизацию Redis Master-Slave и/или кластеризация.

я получил ответ с полезной обратной связью на Github здесь https://github.com/snc/SncRedisBundle/issues/216

В принципе, вы должны создать службу, которая в основном несколько строк кода в services.yml

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

то в вашей конфигурации. yml

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

Все, наслаждайтесь!

ОБНОВЛЕНИЕ - 19 января 2016

На сегодняшний день SncRedisBundle DEV-мастер филиал теперь совместим и поставляется с интегрированной поддержкой Доктрина второго уровня кэша

+0

Не могли бы вы поделиться рабочим примером интеграции SncRedisBundle с кэшем второго уровня Doctrine? Спасибо! – LaurentG

1

Кроме того, необходимо включить правильный cache_driver для кэша второго уровня:

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 

это пример в сочетании с DoctrineCacheBundle.

Смежные вопросы