Я ищу окончательный ответ здесь. Когда включено кэширование объектов, где в конечном итоге живут параметры и переходные процессы?
По умолчанию оба хранятся в базе данных. Но я слышал некоторые упоминания о том, что memcache будет хранить их в другом месте, а APC сделает что-то еще полностью. Где именно эти данные будут сохраняться в обоих случаях?
Ответы:
WordPress по умолчанию выполняет форму «Кеширования объектов», но его время жизни составляет всего одну загрузку страницы.
Параметры на самом деле действительно хороший пример этого. Проверьте этот ответ для получения дополнительной информации. Резюме:
SELECT option_name, option_value from $wpdb->options
заявлениемget_option
никогда не попадет в базу данных, поскольку они хранятся в API-интерфейсе кэширования WP).Опции всегда «живут» в базе данных и всегда сохраняются там - это их «канонический» источник. Тем не менее, опции загружаются в кеш объекта, поэтому при запросе опции есть 99% вероятность того, что запрос никогда не попадет в базу данных.
Переходные процессы немного отличаются.
WordPress позволяет заменить API-интерфейс кеша на раскрывающийся файл - файл, который помещается непосредственно в вашу
wp-content
папку. Если вы создаете свой собственный кеш или добавляете существующий плагин , вы можете сделать так, чтобы кеш объектов сохранялся дольше, чем загрузка одной страницы. Когда вы это сделаете, переходные процессы немного изменятся.Давайте посмотрим на
set_transient
функцию вwp-includes/option.php
.Хммм
$_wp_using_ext_object_cache
? Если это правда, WordPress использует кеш объекта вместо базы данных для хранения переходных процессов. Так как же это установить на истину? Пришло время изучить, как WP настраивает свой собственный API кеша.Вы можете отследить практически все до
wp-load.php
илиwp-settings.php
- оба из них имеют решающее значение для процесса начальной загрузки WordPress. В нашем кеше есть несколько соответствующих строкwp-settings.php
.Помните это падение сверху? Давайте посмотрим на
wp_start_object_cache
вwp-includes/load.php
.Соответствующие строки функции (те, которые относятся к
$_wp_using_ext_object_cache
этому, изменяют способ хранения переходных процессов).если он
object-cache.php
существует в вашем каталоге содержимого, он включается, и WP предполагает, что вы используете внешний постоянный кеш - он устанавливает$_wp_using_ext_object_cache
значение true.Если вы используете внешние объекты кеша переходные процессы будут использовать его. Что поднимает вопрос о том, когда использовать параметры против переходных процессов.
Просто. Если вам нужно, чтобы данные сохранялись бесконечно, используйте опции. Они «кэшируются», но их канонические источники - это база данных, и они никогда не исчезнут, если пользователь явно не запросит их.
Для данных, которые должны храниться в течение заданного промежутка времени, но которые не должны сохраняться после заданного срока службы, используйте переходные процессы. Внутренне WP попытается использовать внешний постоянный кэш объектов, если это возможно, в противном случае данные попадут в таблицу параметров и соберут мусор через psuedo-cron WordPress, когда они истекут.
Некоторые другие проблемы / вопросы:
get_option
? Вероятно. Они вызывают вызов функции, но, скорее всего, не попадут в базу данных. Загрузка базы данных часто является более серьезной проблемой в масштабируемости веб-приложений, чем работа, которую ваш язык делает для создания страницы.add_option
с последним необязательным аргументом, посколькуno
они не загружаются автоматически. Тем не менее, как только вы получите их один раз, они попадут в кеш, и последующие вызовы не попадут в базу данных.источник
Есть 4 типа кэша, о которых я знаю
Trivial - он всегда включен и вступает в силу до того, как в игру вступит любое другое кэширование. Он хранит кэшированные элементы в массиве php, что означает, что он потребляет память из сеанса выполнения php, и что кэш очищается после завершения выполнения php. т. е. даже без использования какого-либо другого кэша, если вы вызываете get_option ('opt') дважды подряд, вы будете выполнять запрос к БД только в первый раз, а во второй раз значение будет возвращено из памяти.
Файл - кэшированные значения хранятся в файлах где-то в вашем корневом каталоге. Я считаю, что это оказалось неэффективным с точки зрения производительности, если у вас не очень быстрое дисковое или картографическое хранилище файлов.
APC (или другое кэширование на основе php-ускорителя) - кэшированные значения хранятся в памяти вашего хост-компьютера и за пределами вашего выделения памяти php. Самая большая потенциальная ошибка заключается в том, что объем данных отсутствует, и если вы запускаете два сайта, потенциально каждый может получить доступ к кэшированным данным другого или перезаписать их.
Memcache - это сетевой кэш. Вы можете запустить службу кэширования в любом месте сети, и она, вероятно, хранит значения в памяти своего хоста. Вам, вероятно, не нужен memcache, если у вас нет балансировки нагрузки в действии.
Кстати, кеширование объектов - это гораздо больше, чем просто кеширование, оно будет хранить практически все, что было извлечено из БД с использованием высокоуровневого WP API.
источник
Опции всегда хранятся в базе данных, а переходные процессы могут храниться только в разделяемой памяти, если установлен APC и плагин, который реализует кэширование APC в WP. Memcache также использует память.
Опции также хранятся в памяти и по возможности загружаются оттуда (если нет, выполняется запрос в БД).
источник
Отличный вопрос
Я думаю, что часть с тем, как WordPress использует
WP_Object_Cache
класс, все еще отсутствует, поэтому я добавлю это.Из документов:
Вот
WP_Object_Cache
структура.Этот
stats()
метод используется для отображения общей статистики об объекте глобального кэша и о том, что там находится. Вот вывод:Это то, что я получил раньше в самом начале шаблона, такого как
single.php
.Обратите внимание на интересующую нас переменную:
global $wp_object_cache
.Закрытый член
$cache
хранит фактические данные кэширования.Так как я был,
single.php
когда я напечатал кеш:Я получаю один пост в кэше.
Объектом будет значение, а ключ кэширования будет
Здесь вы можете проверить
$cache_key
структуру:источник