Transients API: транзитное кэширование
Что такое транзитное кэширование
Заголовок раздела «Что такое транзитное кэширование»Transients API — встроенный механизм WordPress для сохранения данных на определённый промежуток времени (TTL). Для посетителей сайта механизм полностью прозрачен — это инструмент разработчика.
Типичные сценарии:
- фрагменты с данными внешних сервисов: последний твит, прогноз погоды, курсы валют;
- результаты тяжёлых запросов к базе, общие для всех пользователей;
- агрегированные данные для главной страницы.
Ядро само использует transients для RSS-лент и запросов на обновление тем, плагинов и ядра.
Базовое использование
Заголовок раздела «Базовое использование»Три функции: set_transient(), get_transient(), delete_transient().
// Кэшируем результат внешнего API-запроса на 12 часовfunction my_get_exchange_rates() { $rates = get_transient( 'exchange_rates' );
if ( false === $rates ) { $response = wp_remote_get( 'https://api.example.com/rates' ); $rates = json_decode( wp_remote_retrieve_body( $response ), true );
set_transient( 'exchange_rates', $rates, 12 * HOUR_IN_SECONDS ); }
return $rates;}// Принудительная инвалидацияdelete_transient( 'exchange_rates' );Константы времени ядра: MINUTE_IN_SECONDS, HOUR_IN_SECONDS, DAY_IN_SECONDS, WEEK_IN_SECONDS, MONTH_IN_SECONDS, YEAR_IN_SECONDS.
Где хранятся transients
Заголовок раздела «Где хранятся transients»В отличие от объектного кэша, transients постоянны по умолчанию и хранятся в базе данных (таблица wp_options).
Но при установленном плагине внешнего объектного кэша (Redis, Memcached) transients автоматически начинают храниться в нём — быстрее и без нагрузки на базу. Это же касается site-transients в Multisite (группа site-transient — глобальная).
Object cache, transient или option?
Заголовок раздела «Object cache, transient или option?»Матрица выбора по времени жизни данных:
| Задача | Инструмент |
|---|---|
| Сохранить значение только на текущий запрос | Объектный кэш (wp_cache_set) |
| Сохранить на определённый срок (минуты — дни) | Transient (set_transient) |
| Сохранить на неопределённый срок, гарантированно в БД | Опция (update_option) |
Правило: если данные должны пережить запрос и устареть по расписанию — transient. Если это настройка, а не кэш — опция. Если данные нужны только внутри одного запроса — объектный кэш. При установленном persistent object cache все три механизма используют его.
Важно про опции: transient с истёкшим TTL удаляется, а опция остаётся навсегда. Не храните временные данные в опциях — таблица wp_options разрастается, а autoload-опции грузятся при каждом запросе (см. Кэширование объектов).
Ограничения
Заголовок раздела «Ограничения»- Не для персональных данных. Transients общие для всех посетителей. Для данных, привязанных к пользователю, используйте объектный кэш с ключом или группой по user ID.
- TTL — не гарантия удаления. Истёкший transient удалится при следующем обращении к нему, а не ровно в момент истечения.
- Внешние API могут падать. При ошибке
wp_remote_get()не кэшируйте пустой результат надолго — проверяйте ответ передset_transient().
Материалы и источники
Заголовок раздела «Материалы и источники»- Основы кэширования в WordPress — Константин Ковшенин, WP Magazine
- Кеширование WordPress: WP Super Cache, WP Rocket, Surge — WPCraft
- Transients API — официальная документация WordPress
- Кэширование объектов — объектный кэш и persistent backends