~ / blog / kesh

Кэширование — страница 2

Кэш страниц в nginx, фрагменты в Redis, автоматический обходчик и сброс при выкате: как отдавать сайт мгновенно и не показывать посетителю старое.

#Кэширование 2 мин

wp_schedule_single_event молча не ставит дубль в пределах 10 минут

Разовая чистка через 180 с после выката не сработала: такое же событие уже стояло — 32 981 мёртвый ключ провисел 20 минут. Приём: вешать разовую работу на идущий воркер и сравнивать версию кода, а не время. 4568 ключей за 0,03 с.

· · ·
#Кэширование 2 мин

Перенос кэша фрагментов из wp_options в Redis

Таблица опций — 88 % базы, 3,24 ГБ при 739 МБ полезных. Чистка и OPTIMIZE: база 3,7 ГБ → 1 ГБ. Redis с noeviction, версией кода в имени ключа и сжатием в 27,6 раза, откат на временные записи и виджет, который врал в 8 раз.

· · ·
#Кэширование 2 мин

Очередь, вставшая намертво: одноразовое событие wp-cron

Прогон вышел по замку и не поставил следующее событие — очередь из 42 задач стояла, пока кто-нибудь не добавит новую. Одна функция планирования, сторож на тике крона и доказательство: событие снесли руками, через 130 с очередь пуста сама.

· · ·
#Кэширование 2 мин

Что выпадает из прогрева: поддомены, языковая кука, служебные типы

Ключ кэша шире, чем греет обходчик: первый заход на поддомен 2,48 с, выбравший другую страну шёл мимо кэша на каждой странице. Правило сверки ключа с обходом и что мы сознательно не греем.

· · ·
#Кэширование 1 мин

Точечная чистка должна догреваться общей очередью, а не своей

У точечной чистки была своя очередь с разовым событием и без сторожа. Событие не выполнилось — к полудню из 212 товарных страниц в кэше около 40, ответ 2,4–3,7 с. Решение: класть адреса в голову очереди основного обходчика.

· · ·
#Кэширование 2 мин

Часовой добор: почему прогрев одного сайта грузит в десятки раз больше другого

Один код прогрева: 0 запросов за 6 часов на одном сайте и 5109 на другом. Ноль — это «всё тёплое», а тысячи — часовой добор под кэш на 30 минут. На рабочем сайте 75 % запросов к PHP — обходчик. Что сняли и что оставили.

· · ·
#Кэширование 1 мин

Параметры прогрева должны совпадать с фронтом бит в бит

Открытые DevTools сузили окно — фронт прислал другие параметры, и прогретый блок дал MISS прямо на демо. Не тот тип записей, не та группировка (259 товаров — 5 страниц на компьютере и 8 на телефоне). Параметры — из серверной разметки.

· · ·
#Кэширование 2 мин

Обходчик идёт по одному запросу, а FPM пишет seems busy

За 15 секунд через nginx прошло 2 запроса, а пул вырос с 14 до 46 процессов: устаревшая страница отдаётся мгновенно, рендер идёт фоном, и за обходчиком тянется хвост. Пауза только после быстрого ответа, тёплый запас пула — и почему поднимать min_spare хуже.

· · ·

$ tail -f /blog

Не пропустите новые статьи

Пишу разборы по скорости сайтов, кэшу и разработке — на живых проектах и с цифрами. Подпишитесь, и ссылка на новую статью придёт сразу после выхода. Без рекламы и спама, отписаться — в один клик.

В Telegramодна кнопка «Старт» в боте

или на почту

связаться

Расскажите о задаче