2015-08-29 15 views
5

sau khi đầu tư vài ngày để tìm hiểu lý do tại sao cấu hình bộ nhớ cache cấp thứ hai của tôi không hoạt động, tôi hy vọng ai đó có thể hỗ trợ. Hiện tại, không có kết quả cuộc gọi bộ nhớ cache cấp thứ hai trong một lần truy cập.Doctrine Second Level Cache w/Redis

Dự án của tôi hiện đang thiết lập với các gói sau (+ một số khác mà có lẽ không phù hợp cho các thiết lập này):

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

Cache Học thuyết được thiết lập theo cách sau:

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 

Siêu dữ liệu & bộ nhớ cache truy vấn có vẻ hoạt động bình thường, vì có các khóa được tạo trong Redis và Gói SNC Redis cũng ghi lại các lần truy cập bộ nhớ cache của tôi đúng cách. Nhưng "Cache 2l" chỉ đăng bỏ lỡ và puts, thay vì lượt truy cập:

no 2l cache hits

Trong gỡ lỗi của tôi, tôi phát hiện ra rằng trong các yêu cầu bộ nhớ cache từ Bộ Giáo Lý/ORM/Query cố gắng truy cập vào ArrayCache thay của trình điều khiển bộ nhớ cache được định cấu hình.

Có thể đã giúp ích nếu ai đó có cấu hình ví dụ hoạt động cho bộ nhớ cache cấp thứ hai vì nó không hoạt động với Redis cho tôi, cũng như cho APCu hoặc memcached.

Tôi hy vọng ai đó có ý tưởng hoặc chỉ có thể chia sẻ cấu hình làm việc của mình.

Cảm ơn trước & Trân

+0

Có vẻ như không ai biết làm thế nào để sử dụng SncRedisBundle với học thuyết của bộ nhớ cache cấp thứ hai, nếu có thể. –

Trả lời

5

Ok vì vậy cuối cùng tôi đã nhận được câu trả lời cho điều này sau khoảng một tháng! Xin lưu ý rằng Doctrine có hỗ trợ cho nhiều trình điều khiển bộ nhớ cache bao gồm redis, nhưng trong trường hợp của tôi, có lẽ trong trường hợp của OP, tôi cần làm cho nó hoạt động với SncRedisBundle để tận dụng lợi thế của bản sao Redis Master-Slave và/hoặc Clustering.

tôi có câu trả lời của tôi với thông tin phản hồi hữu ích về Github đây https://github.com/snc/SncRedisBundle/issues/216

Về cơ bản, bạn phải tạo một dịch vụ mà cơ bản là một vài dòng mã trong services.yml

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

sau đó trong cấu hình của bạn. yml

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

Vậy đó, Hãy tận hưởng!

CẬP NHẬT - 19 tháng một năm 2016

Tính đến hôm nay, SncRedisBundle dev-master chi nhánh bây giờ đã tương thích và đi kèm với sự hỗ trợ tích hợp cho bộ nhớ cache Cấp Học thuyết thứ hai

+0

Bạn có thể chia sẻ một ví dụ làm việc về việc tích hợp SncRedisBundle với Doctrine Second Level Cache không? Cám ơn! – LaurentG

1

Bạn cũng cần phải kích hoạt đúng cache_driver cho bộ nhớ cache mức độ thứ hai:

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 

này là một ví dụ kết hợp với DoctrineCacheBundle.