2015-08-29 20 views
5

po kilkudniowej inwestycji w ustalenie, dlaczego mój drugi poziom konfiguracji cache dla doktryny nie działa, mam nadzieję, że ktoś może być w stanie wesprzeć. W tej chwili brak wywołania pamięci podręcznej drugiego poziomu skutkuje trafieniem.Doctrine Second Level Cache w/Redis

Mój projekt jest obecnie skonfigurowana z poniższych pakietów (+ kilka innych, które prawdopodobnie nie są istotne dla tej konfiguracji):

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

Pamięć podręczna Doktryna jest skonfigurowana w następujący sposób:

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 

Pamięć podręczna zapytań o metadane: & wydaje się działać poprawnie, ponieważ istnieją klucze utworzone w Redis, a pakiet SNC Redis również poprawnie rejestruje moje działania z pamięcią podręczną. Ale „2l Cache” po prostu loguje tęskni i stawia zamiast hitów:

no 2l cache hits

Podczas debugowania, I okazało się, że w ciągu żądań pamięci podręcznej od doktryny/ORM/Zapytanie próby uzyskania dostępu do ArrayCache zamiast skonfigurowanego sterownika cache.

Może to już pomóc, jeśli ktoś ma działającą przykładową konfigurację pamięci podręcznej drugiego poziomu, ponieważ nie działa ona dla mnie z Redis, ani dla APCu ani memcached.

Mam nadzieję, że ktoś ma pomysł lub może po prostu udostępnić swoją działającą konfigurację.

Dzięki z góry & poważaniem

+0

Wydaje się, nikt nie wie, jak korzystać SncRedisBundle z doktryny pamięć podręczna drugiego poziomu, jeśli to możliwe, nawet w ogóle. –

Odpowiedz

5

Ok, więc w końcu dostałem odpowiedź na to po około miesiącu!

Należy pamiętać, że Doctrine ma natywne wsparcie dla wielu sterowników pamięci podręcznej, w tym redis, ale w moim przypadku, prawdopodobnie również w przypadku OP, musiałem pracować z SncRedisBundle, aby skorzystać z replikacji Redis Master-Slave i/lub Clustering.

dostałem odpowiedź z pomocnych informacji zwrotnych na Github tutaj https://github.com/snc/SncRedisBundle/issues/216

Zasadniczo należy utworzyć usługę, która jest w zasadzie kilka linijek kodu w services.yml

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

następnie w config. yml

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

To wszystko, Enjoy!

AKTUALIZACJA - 19 stycznia 2016

dzień dzisiejszy SncRedisBundle dev-master gałąź jest teraz kompatybilny i pochodzi z wbudowanym wsparciem dla Doctrine Second Level Cache

+0

Czy możesz udostępnić działający przykład integracji SncRedisBundle z Doctrine Second Level Cache? Dzięki! – LaurentG

1

Należy również umożliwić poprawną cache_driver dla drugiego poziomu pamięci podręcznej:

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 

jest to przykład w połączeniu z DoctrineCacheBundle.