Как должен работать кэш wp и помогает ли он повысить производительность?


Я кодировал свой виджет "последние комментарии" и использовал $wpdb->get_results, и я хотел использовать кэш, чтобы он не выполнял запрос при каждой загрузке страницы, поэтому я использовал:

$comments = wp_cache_get('mycomments');
if ($comments == false) {
    $query = //some sql stuff
    $comments = $wpdb->get_results($query);
    wp_cache_set('mycomments', $comments);
}
//then use $comments

И я использовал плагин WP Cache Inspect, чтобы проверить, работает ли он, я попытался установить значение $expire в wp_cache_set двумя способами "9999" и 9999 и удалил кэш между 2 тестами, но это, похоже, не работает для меня, я прокомментировал статью, и она сразу же появилась в недавнем выпуске. комментарии таким образом, кажется, что он не кэширует запрос в течение 9999 секунд, так вот как это должно работать, или я делаю что-то не так?

И заранее благодарю.

РЕДАКТИРОВАТЬ: Я проверял кодекс, там также есть API переходных процессов , но он ограничен 45 символами, так в чем разница между этим и wp_cache? этот, похоже, хранит данные в базе данных.

Author: Pierre, 2012-04-11

2 answers

В WordPress версии 2.0+ кэш объектов не является постоянным. Это сохранит данные в памяти, но для постоянного кэширования при загрузке страниц вам понадобится плагин, смотрите здесь:

Http://codex.wordpress.org/Class_Reference/WP_Object_Cache#Persistent_Caching

В качестве альтернативы используйте переходные процессы, которые являются постоянными. Идентификатор должен содержать не более 45 символов, но данные, прикрепленные к этому идентификатору, могут быть длиннее. Имейте в виду, что хранение очень больших объемов данных этот способ не рекомендуется.

 5
Author: Tom J Nowell, 2012-04-11 15:24:26

wp_cache_set/add функции будут хранить данные для вас до тех пор, пока вы вручную не удалите данные из кэша, или сборщик кэша не будет уничтожен, в зависимости от того, что произойдет раньше.

По умолчанию WP хранит эти данные внутри переменной массива, поэтому сборщик будет уничтожаться при каждой загрузке страницы.

Не забудьте очистить кэш после операций, которые изменяют извлеченные вами данные. В вашем случае для комментариев вам может потребоваться очистить кэш при добавлении нового комментария:

add_action('comment_post', function(){
  wp_cache_delete('mycomments');
});
 1
Author: onetrickpony, 2012-04-11 15:26:16