MySQL имеет функцию под названием Query Cache, но она кэширует наборы результатов запросов в процессе сервера mysqld, а не на клиенте.Если вы снова выполните тот же самый запрос после того, как результат был кэширован в кеше запросов, он скопирует результат из кеша запросов и позволит избежать затрат на повторный запуск запроса.Но это не поможет избежать времени на передачу результата по сети из mysqld в ваше PHP-приложение.
Также имейте в виду, что MySQL Query Cache устарел и устарел .
Кроме того, ваше приложение может хранить данные из результатов запроса в memcached, но обычно это делается кодом приложения (я знаю, что есть UDF для чтения и записи memcached из триггеров MySQL, но это плохая идея).
Если ваша служба memcached не находится на том же хосте, что и ваш PHP-код, это приведет к сетевой передаче дважды : один раз при первом запросе данных из MySQL, а затем снова передачаданные в memcached, затем каждый раз, когда вы извлекаете кэшированные данные out из memcached.
PHP также имеет некоторые функции для кэширования в памяти, такие как APCu .У меня нет никакого опыта в этом, и это не ясно из краткого сканирования документации , где хранит кэшированные данные.
PHP разработан, чтобы быть языком "ничего общего",Каждый PHP-запрос имеет свои собственные данные, и данные обычно не сохраняются до следующего запроса.Вот почему кеш обычно не хранится в памяти PHP.Приложения полагаются либо на memcached, либо на саму базу данных, потому что они будут хранить данные дольше, чем один PHP-запрос.
Если у вас достаточно быстрая сеть, извлечение элементов изкеш по сети.Архитекторы производительности на моей прошлой работе развили эту мудрость:
«Удаленная память быстрее, чем локальное хранилище».
Они означали, чтоесли данные находятся в оперативной памяти на сервере, то чтение их из оперативной памяти даже с дополнительными накладными расходами на их передачу по сети обычно лучше, чем чтение данных из постоянного (дискового) хранилища на локальном хосте.