Как отключить кэширование сущностей в Redis только для определенного действия контроллера? - PullRequest
0 голосов
/ 21 января 2019

У меня есть действие контроллера, которое выполняет тяжелую работу с базой данных / сущностями.Во время профилирования я заметил, что слой кэширования, который пишет в Redis, тратит много времени.Есть ли способ отключить кэш второго уровня для Redis только для этого конкретного маршрута?

Ответы [ 2 ]

0 голосов
/ 26 июля 2019

Нашел способ сделать это:

Расширение Symfony\Component\Cache\DoctrineProvider класса и переопределение save и saveMultiple методов. Используйте статическую логическую переменную в вашем классе для управления сохранением в кеш:

// Your custom class that extends the DoctrineProvider
public function save($id, $data, $lifeTime = 0)
{
    if (static::$enableWriting === false) {
        return false;
    }

    return parent::save($id, $data, $lifeTime);
}


// packages/doctrine.yaml
services:
    doctrine.result_cache_provider:
        class: App\Cache\ResultCacheDoctrineProvider
        public: false
        arguments:
            - '@doctrine.result_cache_pool'
0 голосов
/ 21 января 2019

Вы можете отключить кэширование или изменить каждый запрос, например, с useQueryCache() или useResultCache().

В своем хранилище вы можете использовать $this->createQueryBuilder() для построения запроса. В качестве альтернативы менеджер сущностей предоставляет createQuery() -метод, который принимает DQL-строку. В результирующем объекте запроса любого из этих методов перед вызовом getResult() объекта Query вы можете вызвать эти методы.

...