Вопрос по подключению системы кэширования?

Стоит ли сделать то, что в этой статье описано? ruseller.com/lessons.php?id=1555&rub=37

И дайте пожалуйста ссылки на достойные материалы по этой теме, так как знаний 0, не могу определить что хорошо а что плохо
  • Вопрос задан
  • 347 просмотров
Решения вопроса 2
@mantyr
Пишу много Golang кода с удовольствием:)
Почитайте, optimization.guide и вот вам немного теории:

Кешировать можно:
  • целиком всю страницу (для каждой страницы своя запись в кеше)
  • отдельные части сайта


Кешировать можно в файлах:
  • генераруя готового html
  • генерируя html+php, так работают smarty и прочие шаблонизаторы собирая множество шаблонов в один
  • в виде бинарного содержимого, сюда и готовый html и готовые значения вычислений и прочее
  • в виде сериализованного массива с чем угодно, от предыдущего пункта отличается только форматом хранения


Кешировать можно в базе:
  • в mysql/postgresql и прочих SQL - будет храниться на диске и горячие данные в памяти
  • в mysql/postgresql и прочих SQL в in-memory таблицах - будет храниться в оперативке, но без дополнительных усилий кеш пропадёт при рестарте сервера
  • в in-memory базах данных, часто это memcache, redis и прочее - опять таки выключили сервер - данные пропали
  • в in-memory базах данных с сохранением на диск, это Tarantool, memcachedb и прочие если там заявлена такая функциональность


Так же можно:
  • кешировать всё кроме вставок динамики
  • кешировать куски вставляя их в динамику

Это два противоположных подхода которые при особом желании можно смешивать в рамках одного проекта.

Обновлять кеш можно:
  • при каждом запросе проверяя что старый кеш устарел
  • предкеширование - отдельным кроном/демоном/сервисом генерировать кеш раз в N минут
  • по мере изменения данных сбрасывать кеш и следующий запрос сгенерирует новый
  • по мере изменения данных сбрасывать кеш путём генерации сразу нового и замены старого на новый


Кеш можно хранить:
  • на том же сервере что и сайт - нет задержек в сети, но зато ресурсы теже, CPU, диск, оперативная память
  • на внешнем сервере - задержки в сети, зато ресурсы отдельно


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

Если используете CMS/CMF - посмотрите готовые плагины для кеширования. Если у вас не sharing-хостинг с мини-сайтом - озаботтесь профилированием (xhproof) и мониторингом, это поможет понять где и что кешировать.

Так же стоит рассмотреть кэширование байт-кода:
  • OpCache
  • APC
  • XCache

Стоит прочитать вот эту статью:
Сравнение скорости исполнения кода Drupal для PHP 5.3-5.6 и 7.0. «Битва оптимизаторов кода» apc vs xcache vs opcache https://habrahabr.ru/post/264775/

Так же стоит:
  • увеличить буферы в MySQL (если памяти много)
  • потюнить другие системы, например поставить nginx вместо apache, раздавать статику с другого хоста
  • и конечно же - посмотреть как долго работают SQL запросы и по возможности их облегчить


Кеширование в MySQL с использованием HandlerSocket:
  • данные хранятся в MySQL innodb базе, а значит чтение и запись можно делать как по старинке через SQL так и через HandlerSocket
  • можно сделать любое количество колонок, лишь бы это позволял MySQL
  • быстрая вставка
  • быстрая выборка
  • бинарный протокол передачи данных
  • есть несколько библиотек для PHP, как относительно новых так и старых
  • в Percona Server (форк MySQL) HandlerSocket.so есть в поставке по умолчанию, разве что нужно включить
  • в MySQL необходимо собрать HandlerSocket самостоятельно и включить в MySQL


Можно почитать вот тут:
Ответ написан
@lnked
scrapbook.cash очень удобно, есть примеры
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы