Блог Андрея

 
 

Настройка кэша второго уровня Doctrine 2 для использования memcache в проекте Symfony

Проект Symfony 3.4 на примере которого я описываю использование кэша второго уровня создан из консоли с помощью Symfony cli 4.3, это может быть важно, так как может влиять на пути к некоторым упомянутым файлам.

Сначала надо сконфигруировать Symfony для того, чтобы результаты SQL запросов в принципе кэшировались.

Если вы ещё не настроили кэш второго уровня Doctrine 2, это описано здесь, но не спешите этого делать.

Потому что для использования запросов вам придётся править аннотацию Cache, которую надо добавить каждому классу сущности.

/**
 * Cities
 *
 * @ORMTable(name="cities")
 * @ORMEntity
 * @ORMCache(usage="READ_ONLY", region="global")
 */
class Cities
//...

Вы можете видеть, что у меня добавился аргумент region.

Значение global - это не какое-то специальное значение, просто я пока решил использовать для всех моделей одинаковое время жизни кэша.

Файл config/packages/doctrine.yaml также будет изменён, а именно секция second_level_cache теперь выглядит так:

second_level_cache:
           regions:
                global:
                    lifetime: 900
                    cache_driver:
                        type: memcache
                        host: localhost
                        port: 11211

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

Теперь пример из предыдущей статьи выполняет один запрос к базе данных раз в 15 минут.