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

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

И дайте пожалуйста ссылки на достойные материалы по этой теме, так как знаний 0, не могу определить что хорошо а что плохо
  • Вопрос задан
  • 346 просмотров
Решения вопроса 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 очень удобно, есть примеры
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽