Прежде всего, сайт, на котором я работаю, размещен, и у меня нет доступа, чтобы установить что-нибудь интересное, например memcached.
У меня есть несколько веб-страниц с таблицами HTML. Данные для этих таблиц HTML генерируются с использованием дорогих и сложных запросов MySQL. Я оптимизировал запросы настолько, насколько смог, и разместил индексы для повышения производительности. Проблема в том, что, если у меня высокий трафик на мой сайт, сервер MySQL забивается и испытывает трудности.
Интересно - данные в таблицах MySQL меняются не очень часто. Фактически, оно меняется только после определенного «события», которое происходит каждые несколько недель.
Итак, что я сделал сейчас, это:
- Сохранение HTML-таблицы после ее создания в файл
- При обращении к URL проверьте сохраненный файл, если он существует
- Если файл старше 1 часа, запустите запрос и сохраните новый файл, если не выводите файл
Это гарантирует, что для подавляющего большинства запросов страница загружается очень быстро, а данные могут быть не более 1 часа. Для моей цели это не так уж плохо.
Что мне действительно хотелось бы, так это гарантировать, что при изменении данных в базе данных файл кэша будет удален. Это можно сделать , найдя все скрипты, которые выполняют любые запросы на изменение в таблице, и добавив код для удаления файла кэша, но это ненадежно, так как все будущие изменения должны также позаботиться об этом механизме.
Есть ли элегантный способ сделать это?
У меня нет ничего, кроме ванильного PHP и MySQL (последние версии) - я бы хотел поиграть с memcached, но не могу.