我应该使用SET_TRANSPORT还是UPDATE_OPTION?

时间:2013-04-07 作者:jay

我想在WordPress中存储一些Twitter API数据。每小时之后,我都想从推特上获取新数据,只有在从API成功检索到数据时才进行更新(有时API会出错,所以在这种情况下,我希望继续使用旧数据)。那么在这种情况下,我应该使用set_transientupdate_option?

如果我使用update_option 然后,至少我可以在更新选项之前检查新数据是否可用。

如果我set_transient 一个小时后,新数据不可用,我会丢失存储的数据吗?

1 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

瞬态不像wp_cron 作业,因为在设定的时间过后,它们不会更新自己。尝试访问数据时,瞬态将更新。如果您确实需要大约每小时更新一次,则需要使用wp_cron, 虽然在实践中,这可能并不重要,您可以使用wp_cron 如果需要,请执行更新瞬态的作业。

但是要回答这个问题,当你跑步的时候get_transient 要检查瞬态值,它将返回false 如果"the transient does not exist, does not have a value, or has expired", 但你不知道是哪个get_transient 还运行delete_option if the timeout has expired. 我通过设置一个60秒的超时测试,并检查数据库本身的瞬态,验证了瞬态实际上已从数据库中删除。

在缓存方面,瞬态确实比普通选项有优势。

同样值得注意的是,缓存插件本身会加速瞬态,而正常选项则不然。例如,一个memcached插件可以让WordPress将瞬时值存储在快速内存中,而不是数据库中。因此,应使用瞬态存储任何预期将过期或随时可能过期的数据。

http://codex.wordpress.org/Transients_API

这在您的站点上可能并不特别重要,但通常情况下,使用Transients 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);
}

结束

相关推荐

images in wordpress themes

我正在用wordpress开发一个php主题。我想在网站上显示图像。所以我的问题是什么是最佳实践1) 使用数据库服务器的“图像”或“二进制数据”数据类型将图像本身存储在表中。或2) 将图像作为文件存储在文件系统中,并在表中创建一条记录,其中包含该图像的确切路径。。尽量少打扰数据库。