Делать недействительными страницы из кэшированных категорий (page1, page2 и т. Д.) При добавлении нового сообщения - PullRequest
1 голос
/ 14 сентября 2010

Давайте представим, что у нас есть блог с категорией A. Категория A в настоящее время имеет 1000 сообщений на 100 страницах. Все страницы кэшируются в файлах (например, кэшируются механизмом шаблонов Smarty). Я добавляю сообщение и хочу, чтобы оно сразу отображалось на первой странице. Итак, я должен очистить или сделать недействительным кеш для всех 100 страниц категории А.

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

Моя единственная мысль - добавить number of posts in category в кеш-идентификатор. Итак, сначала мы должны получить количество постов в категории (например, из memcache), а затем проверить, верна ли кэшированная версия по этому номеру.

Все выглядит хорошо и просто. Но давайте представим ситуацию, когда я добавляю новый пост, а затем через 1 минуту удаляю другой (более старый) пост. Количество сообщений по-прежнему составляет 1000, а некоторые страницы категорий останутся старыми (если они не просматривались в течение 1 минуты).

Какое решение?

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

Спасибо

1 Ответ

0 голосов
/ 15 сентября 2010

Количество постов не является хорошим решением, потому что при редактировании поста вы также захотите обновить кеш.

Пара стратегий, о которых я могу подумать:

  • Используйте время, когда изменение было сделано в качестве ссылки.

Когда добавляется (удаляется, редактируется) новое сообщение - сохраняйте текущую отметку времени в категории, давайте назовем ее cache_threshold. Когда страница запрашивается - проверьте, когда эта страница была кэширована. Если он старше нашего порога - страница должна быть восстановлена.

  • Переключиться на кеширование объектов, а не кеширование страниц.

Вместо кэширования целых страниц вы можете кэшировать каждый отдельный пост. Если новый пост добавлен (удален, отредактирован), вы просто немедленно восстановите его кеш, так как он не занимает много времени. Чтобы отобразить страницу, вам просто нужно собрать необходимое количество кэшированных сообщений и отобразить их.

Это решение требует больше работы, но оно более гибкое и эффективное.

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