Недостаточные страницы категорий кэширования (Page1, Page2 и т. Д.) Когда добавлен новый пост?

StackOverflow https://stackoverflow.com/questions/3711525

Вопрос

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

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

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

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

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

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

Спасибо

Это было полезно?

Решение

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top