Кэширование работает по-разному, но для PHP, в частности, я могу придумать несколько способов:
Вызовы базы данных;они медленные, требуют вычислений и могут быть довольно интенсивными.Если у вас есть повторяющиеся звонки, кэширование запроса является золотым.Там два уровня;на стороне PHP, где вы контролируете кеш, и на стороне базы данных, где они делают.
Запуск кода PHP означает, что веб-сервер вызывает интерпретатор PHP, анализирует код и запускает его.PHP-кеширующий может кэшировать часть анализа и сразу переходить к работающей части.Тогда есть следующее поколение прямого компиляции кода PHP в C и запуска его оттуда (как это делает Facebook).
Вычисления;если вы выполняете математику или выполняете многократные операции, вы можете кэшировать результат, а не вычислять его каждый раз.
Преимущества;
- скорость
- меньше используемых ресурсов
- повторное использование
- умный
Недостатки;
- устаревшие данные
- накладные расходы
- сложность
Я буду иметь дело только снедостатки здесь;
Во-первых, устаревшие данные;это означает, что при использовании кэшированного содержимого / данных вы рискуете представить старые данные, которые больше не соответствуют новой ситуации.Если вы кэшировали запрос продуктов, но в то же время менеджер продуктов удалил четыре продукта, пользователи получат списки продуктов, которых не существует.Намного сложнее понять, как с этим справиться, но в основном речь идет о создании хэшей / идентификаторов для кешей, которые что-то значат для состояния данных в кеше, или бизнес-логики, которая сбрасывает кеш (или обновления, илидобавляет) с новыми битами данных.Это сложная область, и она очень сильно зависит от ваших требований.
Тогда издержки - это вся бизнес-логика, которую вы используете, чтобы убедиться, что ваши данные находятся где-то между быстротой и устареванием, что приводит к сложности и сложности.приводит к большему количеству кода, который вам нужно поддерживать и понимать.Вы легко потеряете контроль над тем, где существуют данные в кеширующем комплексе, на каком уровне и как исправить устаревшие данные, если вы их получите.Это может легко выйти из-под контроля, поэтому вместо кеширования сложной логики вы возвращаетесь к простым временным меткам и просто говорите, что запрос кэшируется в течение минуты или около того, и надеетесь на лучшее (что, по общему признанию, может быть весьма эффективным).и не слишком сумасшедший).Вы можете указать время жизни вашего кеша (скажем, он будет жить X минут в кеше) против доступа (он будет жить 10 запросов) против времени (он будет работать до 10 вечера) и его вариантов.Конечно, чем больше вариаций, тем больше сложностей.
Однако, сказав, что кэширование может превратить болото системы в довольно ловкую маленькую лисичку без особых усилий или сложности.Немного может проделать долгий путь, и я бы порекомендовал написание систем, использующих кэширование в качестве основного компонента.