it-swarm.com.ru

Должен ли я использовать set_transient или update_option?

Я хочу хранить некоторые данные Twitter API в WordPress. Через каждый час я хочу получать новые данные из Twitter и обновлять их только в том случае, если данные успешно извлекаются из API (иногда API выдает ошибку, поэтому в этом случае я хочу продолжать использовать старые данные). Так в таком случае я должен использовать set_transient или update_option?

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

Что произойдет, если я set_transient в течение часа и через час новые данные не будут доступны, я потеряю сохраненные данные?

5
jay

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

Но чтобы ответить на заданный вопрос, когда вы запустите get_transient для проверки вашего переходного значения, он вернет false, если "переходный процесс не существует, не имеет значения или срок его действия истек" , но вы не не знаю, какой и при запуске get_transient также запускается delete_optionесли время ожидания истекло . Я проверил, что переходный процесс фактически удален из базы данных, настроив 60-секундный тест тайм-аута и проверив саму базу данных на переходный процесс.

Переходные процессы имеют преимущество перед обычными параметрами с точки зрения кэширования.

Также следует отметить, что переходные процессы по своей сути ускоряются плагинами кэширования, а обычные параметры - нет. Например, плагин memcached позволит WordPress хранить временные значения в быстрой памяти, а не в базе данных. По этой причине переходные процессы должны использоваться для хранения любых данных, срок действия которых ожидается или может истечь в любое время.

http://codex.wordpress.org/Transients_API

В частности, это может не иметь значения для вашего сайта, но в целом это имеет значение для использования Transient API. Вам придется что-то делать с проблемой потерянных данных. Что-то вроде...

function get_twit_wpse_94911() {
  $trans = 'test_transient';
  $data = get_option('_transient_'.$trans);
  if (empty($data)) {
    $data = 'Yay Awesome Data'; // default data if you want it
  }
  if (!get_transient($trans)) {
    // check for new information
    // $new = fetch_Twitter_however_you_are_doing_it();
    // check for the integrity of the new data
    // !empty() may not be adequate
    if (!empty($new)) {
      $data = $new;
    }
    set_transient($trans,$data,60*60);
  }
  return get_transient($trans);
}
4
s_ha_dum