Автоматически перестраивать кеш - PullRequest
3 голосов
/ 06 июля 2011

Я запускаю проект Symfony 1.4 с очень большим объемом данных.Главная страница и страницы категорий используют пейджеры, которые должны знать, сколько строк доступно.Я передаю запрос, который содержит присоединения к пейджеру, что приводит к времени загрузки на этих страницах 1 минуты.

Я настроил cache.yml для соответствующих действий.Но я думаю, что обходной путь недостаточен, и вот мои предположения:

Symfony перестраивает кэш в рамках одного запроса, сделанного пользователем.Давайте назовем этого пользователя «кеш-жертвой» для упрощения вещей.

В нашем случае данные должны обновляться - для этого достаточно 10 минут.Очевидно, что кеш не будет перестроен, если ни один пользователь не хочет быть «жертвой кеша» и поэтому просто отменяет запрос.Верны ли эти предположения?

Итак, я пришел к мысли, что Symfony должен подделать http-запрос после восстановления кеша.Новые записи кэша должны быть записаны во временный файл / каталог и заменены предыдущими записями кэша, как только завершится перестройка кэша.

Возможно ли это?

ВПо моему мнению, это похоже на концепцию двойной буферизации.

Не было бы глупо, если бы в многопользовательской игре была одна «жертва gpu», которая видит, как экран строится построчно?(Это однобокое сравнение, я знаю ...;))

Редактировать

Нет «кеш-жертвы» - каждые 10 минут перезагрузки страницызанимает 1 минуту для каждого пользователя.

Ответы [ 2 ]

0 голосов
/ 02 августа 2012

Извините за некромантство (есть ли значок для этого?). Конфигурируя cache.yml, вы просто кэшируете слой представления вашего приложения (то есть css, js и html) для ЗАПРОСОВ БЕЗ ПАРАМЕТРОВ. Навигация по пейджеру, очевидно, имеет? Page = X в запросе GET.

Взято из документации symfony 1.4 config.yml:

Входящий запрос с параметрами GET в строке запроса или отправленный с помощью методов POST, PUT или DELETE никогда не будет кэшироваться symfony, независимо от конфигурации. http://www.symfony -project.org / ссылка / 1_4 / ен / 09-Cache

Что может помочь вам - это кэшировать результаты базы данных, но это болезненный процесс для symfony / doctrine. Ссылаться на: http://www.symfony -project.org / более-с Symfony / 1_4 / ен / 08-Advanced-Doctrine-Usage # chapter_08_using_doctrine_result_caching

Edit: Это может помочь вам также: http://www.zalas.eu/symfony-meets-apc-alternative-php-cache

0 голосов
/ 30 октября 2011

Я думаю, что ваша проблема из-за некоторых отсутствующих или неправильных индексов. У меня есть проект sf1.4 для большого футбольного сайта (то есть 2 млн. Страниц в день), и пейджеры работают не так медленно, даже если в нашу базу данных в настоящее время входит более 1 млн. Строк. Посмотрите на ваш запрос с помощью EXPLAIN и проверьте, где он идет плохо ...

...