Комментарии 18
В контексте MySQL еще остались неупомянутыми:
- Кэш индексов MyISAM
- Кэш индексов и таблиц InnoDB
- Кэш файловой системы как применительно к таблицам MyISAM, так и файлам вообще
Да, этот запрос кэшироваться не будет, но будут кэшироваться все запросы к этой таблице, если их количество больше одного.Это просто уменьшит вымывание кэша и, соответвенно, увеличит шансы на попадание в кэш результатов других запросов, независимо от того, обращаются они к этой же таблице или к какой-то другой.
Лучше бы про Django, RoR, Sping, а то это жуткий баян.
Еще про кеширование на уровне service worker можно упомянуть. Весьма полезная вещь!
Кэширование страницы целиком
Возможный минус такого кеширования в определенный случаях — при изменении какого-то блока, который есть на всех страницах, нужно сбрасывать весь кеш.
— APC;
Уже актуален OpCache
2.4, 2.5
Не понял :)
2.6 Кэширование mysql на основе query cache
Я отключаю.
Минус — в его тупости. Изменение хоть одной строки таблицы удаляет из кеша все записи, где есть эта таблица.
Минус — в его тупости. Изменение хоть одной строки таблицы удаляет из кеша все записи, где есть эта таблица.Это не минус. Это практически единственный возможный вариант работы кэша запросов. Особенно, когда в кэше лежат результаты тысяч или десятков тысяч довольно сложных запросов.
А вот настоящий минус, имхо, в том, что он это удаление делает весьма долго. Из-за этого нет смысла делать его большого размера, т.к. накладные расходы на его содержание начинают превышать выгоды. По моим наблюдениям верхний порог находится где-то в районе 128-256 Мбайт.
нужно сбрасывать весь кеш
Ну, есть же теги. Инвалидируем по тегу некую группу данных и всё. Абсолютно весь кэш дропать не нужно.
блок на всех страницах -> тег на всех страницах -> сбрасываем кеш тега -> сбрасываем весь кеш
:)
:)
А… Ну да, не подумал об этом.
Из-за похожей проблемы (можно закэшировать всю страницу, но баннеры кэшировать нельзя) мне пришлось у себя сделать небольшой костыль:
- генерирую целиком страницу, но вместо блоков я вывожу плейсхолдер и кэширую ее (или беру из кэша если уже есть)
- перед выводом страницы генерирую блоки для каждого плейсхолдера и заменяю их.
Вообще, такую задачу вроде как можно с помощью varnish решить, но мне было лень разбираться :)
Проще говоря,Не будет.
WHERE show_ts<=UNIX_TIMESTAMP()
Если использовать постоянно меняющийся timestamp в таких запросах, то sql кэш будет не только бесполезен, но даже вреден, так как будет копиться количество кэшированных запросов, данные которых устарели в момент создания кэша.
How the Query Cache Operates
A query cannot be cached if it contains any of the functions shown in the following table.
…
UNIX_TIMESTAMP() with no parameter
Плюс за разъяснение необходимости кэширования. Но хотелось бы увидеть в статье больше пояснений и ссылок на спецификации.
Например, этот пункт для меня остался непонятным.
А для этого случая есть формализованные рекомендации в RFC7234, упоминание которого, кстати, в контексте статьи было бы очень уместным.
1.2 Кэширование https
Например, этот пункт для меня остался непонятным.
браузер иногда опрашивает сервер для получения обновлений, но периодичность и правила для каждого браузера настраиваются его разработчиком
А для этого случая есть формализованные рекомендации в RFC7234, упоминание которого, кстати, в контексте статьи было бы очень уместным.
Не упомянуто кэширование ответов DNS на клиенте.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
11 видов кэширования для современного сайта