web-dev-qa-db-fra.com

Devrais-je utiliser set_transient ou update_option?

Je souhaite stocker des données d'API Twitter dans WordPress. Toutes les heures, je veux récupérer de nouvelles données sur Twitter et ne les mettre à jour que si les données ont été récupérées à partir de l'API (parfois, l'API donne une erreur, donc dans ce cas, je veux continuer à utiliser les anciennes données). Donc, dans ce cas, devrais-je utiliser set_transient ou update_option?

Si j'ai utilisé update_option, au moins, je peux vérifier si de nouvelles données sont disponibles avant de mettre à jour l'option.

Que se passe-t-il si je set_transient pendant une heure et après une heure si les nouvelles données ne sont pas disponibles, vais-je perdre les données stockées?

5
jay

Un transitoire ne ressemble pas à un wp_cron job en ce sens qu'il ne se met pas à jour automatiquement une fois le délai imparti écoulé. Un transitoire sera mis à jour lors d'une tentative d'accès aux données. Si vous avez réellement besoin d'une mise à jour toutes les heures environ, vous devrez utiliser wp_cron , bien qu'en pratique cela puisse avoir peu d'importance et que vous puissiez utiliser un wp_cron job pour mettre à jour le transitoire si vous vouliez.

Mais pour répondre à la question posée, lorsque vous exécutez get_transient pour vérifier votre valeur transitoire, il retournera false si "le transitoire n'existe pas, n'a pas de valeur ou a expiré. " , mais vous ne savez pas lequel, et exécuter get_transient exécute également delete_optionsi le délai a expiré . J'ai vérifié que le transitoire est en fait supprimé de la base de données en configurant un test de délai d'attente de 60 secondes et en vérifiant la base de données pour le transitoire.

Les transitoires ont un avantage sur les options normales en termes de mise en cache.

A noter également que les transitoires sont accélérés de manière inhérente par la mise en cache des plugins, contrairement aux options normales. Un plugin memcached, par exemple, permettrait à WordPress de stocker les valeurs transitoires dans la mémoire rapide plutôt que dans la base de données. Pour cette raison, les transitoires doivent être utilisés pour stocker toutes les données dont l’expiration est attendue ou qui peuvent expirer à tout moment.

http://codex.wordpress.org/Transients_API

Cela peut ne pas être important sur votre site en particulier, mais en général, cela compte pour l'utilisation de l'API Transients. Cependant, vous devrez faire quelque chose à propos du problème de perte de données. Quelque chose comme...

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