Кешування в PHP пояснено. OPcache, Memcached і Redis
На PHP працює дуже велика частка динамічних сайтів, тому розробникам PHP важливо знатися на кешуванні: OPcache, кеші даних і кеші сторінок.

Що таке PHP?
PHP є мовою програмування для створення динамічного вмісту на вебсторінці: показати список записів з бази даних, отримати рекламу, вивести стрічку новин або потік Twitter. Один зі способів пришвидшити все це: використати кешування PHP.
Що таке кешування?
Вебсторінки завантажуються швидше, якщо частину сторінки або всю її зберігати в пам'яті, у файлі на веб-сервері або в мережі доставки вмісту (CDN), замість створювати її щоразу, коли хтось відкриває цей URL. Це називається кешуванням. Так користувачі отримують кращий досвід, бо менше чекають, натиснувши на наступну сторінку.
Кешувати можна вміст: зображення, HTML і дані. Наприклад, немає потреби отримувати те саме зображення 10 разів для 10 різних людей. Краще його закешувати. Кеш зберігає вебсторінку з усіма вже готовими даними, скажімо, зі списком імен.
- Related reading: Varnish Cache пояснено (anchor text from the Ukrainian manuscript's h1)
Кулінарна книга програміста
Розгляньте звернення до бази даних. Немає сенсу читати базу 100 разів для 100 людей, які завантажують ті самі записи, наприклад щось спільне для багатьох, як-от ціну товару, який ви просуваєте на головній. Ефективніше взяти це значення з кешу.
Застосунки можуть кешувати і відповіді API. Наприклад, саме через API працює реклама на сторінці. Але це контрприклад: рекламу ви б не кешували, бо рекламодавець показує різним людям різні оголошення.
Тож кешування підходить не для всіх ситуацій. Зокрема, воно не годиться для даних, які часто змінюються або унікальні для кожного користувача.
PHP має один важливий вбудований кеш: OPcache, який постачається разом із PHP. Щоразу, коли виконується PHP-скрипт, PHP спершу компілює його в байткод; OPcache тримає цей скомпільований байткод у спільній пам'яті, тож скрипти не перекомпілюються на кожен запит. Переконайтеся, що він увімкнений і що його пам'яті достатньо для вашої кодової бази. Зазвичай це найдешевше прискорення PHP з доступних.
Втім, вбудованого кешу для ваших даних у PHP немає. Для цього існують open source фреймворки й розширення, як-от клієнти Memcached і Redis, які дають програмісту змогу спроєктувати код для такої роботи. Клієнтська бібліотека перевіряє кеш, перш ніж звертатися до бази даних.
Кешування PHP і WordPress
WordPress має API об'єктного кешу, який може працювати поверх Memcached або Redis, а плагіни кешу сторінок, такі як W3 Total Cache або WP Super Cache, додають кешування цілих сторінок. Це пришвидшить і публікацію вмісту. Будь-який власний код для WordPress теж може використовувати кешування, якщо додати фреймворк.
Налаштування кешу
Слушне заперечення: як кеш може знати останні п'ять заголовків, не перевіривши? Відповідь: він і не знає.
Кешуванням керують розмір і час. Тож час кешу можна встановити на 5 секунд або на 5 хвилин.
Коли час кешу спливає, PHP-код робить повний цикл до сервера бази даних або API, щоб перевірити, чи щось змінилося.
Кеші обмежені й розміром: коли кеш заповнений, найдавніше використані записи витісняються, щоб звільнити місце для нових.
Головний висновок
На PHP працює дуже велика частка динамічних сайтів.
OPcache, кеш даних і кеш сторінок є трьома рівнями, які варто налаштувати правильно. Якщо маєте запитання, зв'яжіться з нашою командою.
З архіву блогу EuroVPS, уперше опубліковано 10 серпня 2021 р..
Усі нотатки з практики