web-dev-qa-db-ja.com

Set_transientとupdate_optionのどちらを使うべきですか?

私はいくつかのTwitter APIデータをWordPressに保存したいです。 1時間ごとに、Twitterから新しいデータを取得し、データがAPIから正常に取得された場合にのみ更新します(場合によってはAPIでエラーが発生するため、古いデータを使用し続けます)。それで、その場合私はset_transientまたはupdate_optionを使うべきですか?

update_optionを使用した場合、少なくともオプションを更新する前に新しいデータが利用可能かどうかを確認できます。

1時間set_transientして1時間後に新しいデータが利用できなくなった場合、どうなりますか?保存されたデータを失いますか?

5
jay

一時的なものは、 wp_cron ジョブとは異なり、設定時間が経過しても自分自身を更新しません。データにアクセスしようとすると、トランジェントが更新されます。実際には1時間ごとの更新が必要な場合は、 wp_cron を使用する必要がありますが、実際にはそれほど問題にならないので、 wp_cron ジョブを使用します。必要に応じてトランジェントを更新します。

しかし、尋ねられた質問に答えるために、 get_transient を実行して一時値をチェックすると、 "一時値が存在しない、値がない、または期限切れになった場合はfalseが返されます。 " しかし、どちらがわかりません。タイムアウトが期限切れになった場合はget_transientを実行しても delete_optionが実行されます 。 60秒のタイムアウトテストを設定し、データベース自体で一時的なものをチェックすることで、一時的なものが実際にデータベースから削除されることを確認しました。

トランジェントは、キャッシングの点で通常のオプションよりも優れています。

また、トランジェントは本来プラグインをキャッシュすることで本質的にスピードアップしていますが、通常のオプションはそうではありません。たとえば、memcachedプラグインを使用すると、WordPressは一時的な値をデータベースではなく高速メモリに格納します。このため、期限切れが予想されるデータ、またはいつでも期限切れになる可能性があるデータを格納するためにトランジェントを使用する必要があります。

http://codex.wordpress.org/Transients_API

これはあなたのサイトでは特に問題にならないかもしれませんが、一般的にそれはトランジェント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