Doctrine query_cache автоматически истекает - PullRequest
1 голос
/ 23 марта 2020

Я использую symfony + doctrine + redis с помощью composer связки sncRedisBundle

В моем config.yml я включил doctrine запрос кеш :

orm:
    default_entity_manager: default
    entity_managers:
        default:
            connection: default
            auto_mapping: false
            metadata_cache_driver: redis
            query_cache_driver: redis
            result_cache_driver: redis # !!!

snc_redis:
clients:

    doctrine:
        type: predis
        alias: doctrine_redis
        dsn: "%redis_dsn_doctrine%"
        logging: false
        options:
            connection_persistent: true

doctrine:
    query_cache: #!!!!!!!!
      #it caches the translation from Doctrine's DQL into SQL.
        client: doctrine_redis
        namespace: shop_doctrine_query  
        entity_manager: [default, legacy]

Ключи, установленные doctrine для его result_cache, никогда не истекают: enter image description here

Как я могу позвонить автоматически \Doctrine\ORM\Query::setQueryCacheLifetime или сделать этот кэш истекает. (Обратите внимание, что у меня нет доступа к настройкам политик повторного выселения на этом сервере).

Ответы [ 2 ]

1 голос
/ 05 мая 2020

Из doctrine -документов ,

Драйвер кэша запросов по умолчанию передается из экземпляра Doctrine \ ORM \ Configuration в каждый экземпляр Doctrine \ ORM \ Query и также включен по умолчанию.

Таким образом, вы можете использовать,

Query::setQueryCacheLifeTime($seconds = 3600) - Set lifetime of the query caching.

Как показано ниже,

doctrine:
    query_cache: #!!!!!!!!
      #it caches the translation from Doctrine's DQL into SQL.
        client: doctrine_redis
        namespace: shop_doctrine_query  
        entity_manager: [default, legacy]
        life_time: 3600  #seconds .. or lifetime : 3600
0 голосов
/ 01 мая 2020

Я думаю, что время жизни кэша запросов Doctrine настроено не в пакете doctrine и не в пакете redis, а в пакете фреймворка, где вы устанавливаете свой пул кэша.

Вам следует посмотрите на эту проблему , где пользователь спрашивает, как настроить RedisCluster с Doctrine Cache. B-Galati отвечает примером конфигурации, где он определяет время жизни для doctrine кэша результатов.

Не могли бы вы попробовать что-то вроде:

framework:
    cache:
        pools:
            cache.doctrine.orm.default.query: ## I'm not sure of this name
                adapter: cache.app
                default_lifetime: 25200 # 1 week

Или

framework:
    cache:
        pools:
            doctrine.query_cache_pool:
                adapter: cache.app
                default_lifetime: 25200 # 1 week

Команда symfony console cache:pool:list может помочь вам определить ваши пулы, а symfony console cache:pool:prune поможет вам определить, удаляются ли устаревшие запросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...