Кеширование только часто используемых данных в PHP - PullRequest
2 голосов
/ 29 января 2011

У меня есть новостной сайт, который получает около 58 000 обращений в день за 36 000 статей. Из этих 36000 уникальных историй 30000 получают только 1 хит (большинство из которых - поисковые роботы), и только 250 историй получают более 20 показов. Кэширование чего-либо, но эти 250 статей - это пустая трата памяти.

В настоящее время я использую MySQL Query Cache и xcache для кэширования данных. Таблица обновляется каждые 5-10 минут, поэтому только Query Cache не очень полезен. Как я могу обнаружить часто посещаемые страницы и кэшировать данные?

Ответы [ 2 ]

4 голосов
/ 29 января 2011

Я думаю, вы можете начать с двух вариантов:

  1. По умолчанию вы ничего не кэшируете.

    Вы можете реализовать с помощью шаблона Observer / Observable способ вызвать событие, когда представление статьи достигает порогового значения, и начать кэширование страницы.

  2. Вы кэшируете каждую статью при создании

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

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

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

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

1 голос
/ 29 января 2011

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

...