~ / blog / kesh

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

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

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

Перечень ячеек собирается сам: обходчик читает разметку

Обходчик страниц вынимает из HTML контейнеры блоков с параметрами и пишет их в реестр — охват вырос с «главная и категории» до 1030 ячеек. Все параметры — в разметке, остальное — из реестра живых запросов.

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

WP_HOME из заголовка Host: кэш-код видит чужой домен

Выкат первым заметил бот на www. и dev. — код прогрева искал свой сервер по чужому имени, очередь не встала, в кэше 12 файлов на 6 часов. Тихий вариант: прогрев греет ячейки чужого хоста. Лечение — адрес прямо из базы.

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

Обходчик затирает новую очередь: get_option кэширует опцию на весь запрос

Воркер в конце прогона записывал старый остаток поверх нового круга после выката — главная оставалась холодной. Повторный get_option возвращает снимок начала запроса. wp_cache_delete, номер круга и слияние вместо перезаписи.

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

Пустой ответ — это результат, а не ошибка

Правило «пустое не кэшируем» плюс сторож полноты — замкнутый круг: 2092 из 3118 ячеек залипли в очереди. Пустая вторая страница и товар без допов — законный результат. Признак сбоя — исключение, а не пустота.

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

Два полных сброса кэша одновременно: атомарный замок через INSERT IGNORE

Выкат одновременно замечают живой запрос и крон — два сброса рвут каталог друг у друга. add_option проверяет и пишет в два шага и не спасает. INSERT IGNORE, протухание замка через 5 минут, try/finally и сигнал только от владельца.

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

Полный сброс кэша обрывается на исчезнувшей папке, и прогрев не стартует

nginx удаляет подкаталоги кэша, пока мы их обходим: исключение, return в catch — и сигнал прогрева не отправлен. 634 из 640 страниц MISS через 6 минут после выката. CATCH_GET_CHILD, catch без return и как воспроизвести.

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

Изоляция рендера: воркер в одном процессе травит кэш

Переменная запроса из шаблона товара доживала до конца прогона воркера: 134 из 139 ячеек без вкладок, все HIT, сторож доволен. Снимок и восстановление состояния, маркеры по группам и вторая беда — Cannot redeclare по кругу.

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

Выкат везёт манифест раньше PHP: сброс выполняет старый код

Манифест сборки приехал на 27 секунд раньше исправленного PHP — детектор выката запустил сброс старым кодом. Правку в пути сброса нельзя проверить тем же выкатом: проверять следующим или вызовом сигнала руками (0,03–0,07 с).

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

Фоновый рендер наследует не то окружение

Воркер в командной строке без HTTPS собирает http-ссылки — карточки без картинок на https-сайте. Та же ошибка в генераторе миниатюр: 47 постеров по http. Чек-лист окружения и почему проверочный скрипт видел 167 промахов из 167.

· · ·

$ tail -f /blog

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

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

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

или на почту

связаться

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