Comments 18
В контексте MySQL еще остались неупомянутыми:
- Кэш индексов MyISAM
- Кэш индексов и таблиц InnoDB
- Кэш файловой системы как применительно к таблицам MyISAM, так и файлам вообще
Да, этот запрос кэшироваться не будет, но будут кэшироваться все запросы к этой таблице, если их количество больше одного.Это просто уменьшит вымывание кэша и, соответвенно, увеличит шансы на попадание в кэш результатов других запросов, независимо от того, обращаются они к этой же таблице или к какой-то другой.
+2
Лучше бы про Django, RoR, Sping, а то это жуткий баян.
0
Еще про кеширование на уровне service worker можно упомянуть. Весьма полезная вещь!
+2
Кэширование страницы целиком
Возможный минус такого кеширования в определенный случаях — при изменении какого-то блока, который есть на всех страницах, нужно сбрасывать весь кеш.
— APC;
Уже актуален OpCache
2.4, 2.5
Не понял :)
2.6 Кэширование mysql на основе query cache
Я отключаю.
Минус — в его тупости. Изменение хоть одной строки таблицы удаляет из кеша все записи, где есть эта таблица.
+3
Минус — в его тупости. Изменение хоть одной строки таблицы удаляет из кеша все записи, где есть эта таблица.Это не минус. Это практически единственный возможный вариант работы кэша запросов. Особенно, когда в кэше лежат результаты тысяч или десятков тысяч довольно сложных запросов.
А вот настоящий минус, имхо, в том, что он это удаление делает весьма долго. Из-за этого нет смысла делать его большого размера, т.к. накладные расходы на его содержание начинают превышать выгоды. По моим наблюдениям верхний порог находится где-то в районе 128-256 Мбайт.
+2
нужно сбрасывать весь кеш
Ну, есть же теги. Инвалидируем по тегу некую группу данных и всё. Абсолютно весь кэш дропать не нужно.
0
блок на всех страницах -> тег на всех страницах -> сбрасываем кеш тега -> сбрасываем весь кеш
:)
:)
0
А… Ну да, не подумал об этом.
Из-за похожей проблемы (можно закэшировать всю страницу, но баннеры кэшировать нельзя) мне пришлось у себя сделать небольшой костыль:
- генерирую целиком страницу, но вместо блоков я вывожу плейсхолдер и кэширую ее (или беру из кэша если уже есть)
- перед выводом страницы генерирую блоки для каждого плейсхолдера и заменяю их.
Вообще, такую задачу вроде как можно с помощью varnish решить, но мне было лень разбираться :)
0
Проще говоря,Не будет.
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
0
Плюс за разъяснение необходимости кэширования. Но хотелось бы увидеть в статье больше пояснений и ссылок на спецификации.
Например, этот пункт для меня остался непонятным.
А для этого случая есть формализованные рекомендации в RFC7234, упоминание которого, кстати, в контексте статьи было бы очень уместным.
1.2 Кэширование https
Например, этот пункт для меня остался непонятным.
браузер иногда опрашивает сервер для получения обновлений, но периодичность и правила для каждого браузера настраиваются его разработчиком
А для этого случая есть формализованные рекомендации в RFC7234, упоминание которого, кстати, в контексте статьи было бы очень уместным.
0
Не упомянуто кэширование ответов DNS на клиенте.
0
Смешались в кучу кони, люди…
Если мы говорим о кешировании со стороны юзера то тут важна оптимизация и буферизация доставляемого контента: http2, etag, localstorage, даже попадались извращения по типу хранения части данных в куках. Все это не упомянуто. Что уже говорить о современных вариантах по типу хромовского service worker.
Если мы говорим о кешировании на бэкенде то это целиком и полностью зависит от бизнес логики вашего приложения/сайта. Начиная с того что кеширование вам вообще может не понадобиться (в случае если у вас микробложик с mongo в качестве базы данных) и заканчивая тем что вам может понадобиться ряд кеширующих upstream серверов с помощью которых будет балансироваться нагрузка.
Если мы говорим о кешировании со стороны юзера то тут важна оптимизация и буферизация доставляемого контента: http2, etag, localstorage, даже попадались извращения по типу хранения части данных в куках. Все это не упомянуто. Что уже говорить о современных вариантах по типу хромовского service worker.
Если мы говорим о кешировании на бэкенде то это целиком и полностью зависит от бизнес логики вашего приложения/сайта. Начиная с того что кеширование вам вообще может не понадобиться (в случае если у вас микробложик с mongo в качестве базы данных) и заканчивая тем что вам может понадобиться ряд кеширующих upstream серверов с помощью которых будет балансироваться нагрузка.
0
Sign up to leave a comment.
11 видов кэширования для современного сайта