WordPress缓存-瞬时API或“UPDATE_USER_META”Cronjob?

时间:2012-02-28 作者:Zach Reed

我正在尝试根据查询设置用户元。基本上,如果查询返回true,则设置此值,否则设置此值(如果为true,则不设置)。这很有效,但问题是我目前每次都会打电话检查true或false,我知道这是不好的,而且不必要的,尤其是对于我正在进行的查询类型(如果是true,那么之后将始终保持true)。

那么,我应该如何缓存这些请求呢?我应该用WordPress Transient API设置它,还是应该每X小时运行一次cron作业,然后根据结果“update\\u user\\u meta”?

我只是对这两种方法都有点迷茫,需要一些关于正确路径的指导。谢谢

2 个回复
SO网友:Tom

虽然您的两种选择(即使用瞬态或使用cron作业)都是可行的,但我非常喜欢使用瞬态,除非数据集非常大或需要自动化该过程。

如果看不到当前的大部分代码,很难给出一个有效的示例。尽管如此,如果你最终走的是瞬变路线,我建议你这样做:

// Now, check to see if the value is in the cache...
if( !( $our_data = get_transient($key) ) ) {

    // If not, then we\'ll check the user meta...
    if( !($our_data = get_user_meta($user_id, $key, true)) ) {

        // If not there, we create it and store it.
        $our_data = \'our data\';
        update_user_meta($user_id, $key, $our_data);

    } // end if

    // And we unconditionally update the cache with an expiration of 1 day
    set_transient($key, $our_data, (60 * 60 * 24) );        

} // end if
一般来说,上述代码将执行以下操作:

检查缓存以查看该值是否存在。如果找到该值,则不会执行任何其他操作;但是,缓存将在24小时后过期,因此最终将返回null。

如果值不在缓存中,那么我们检查用户的元数据。如果它在那里,我们就使用它;否则,我们将手动创建它,然后更新用户元。如果从未创建过用户元,WordPress将在运行update_user_meta 作用

最后,我们无条件地使用元表中的数据或手动创建的数据更新缓存。

上述代码的唯一问题是,如果用户元永远不会更新,因为上述函数使用的是那里的内容,并且只有当它为null时才会更新。为了缓解这种情况,我希望:

代码库中其他地方的另一个函数正在更新用户值,您引入了另一个条件来触发更新函数

// Contrived. This could be a query, the result of another function, etc.
$user_should_be_updated = true;

if( $user_should_be_updated || !( $our_data = get_user_meta($user_id, $key, true) ) ) {
   /* Create the data, update the user */
} // end if
Manny\'s comment 还提供了一些很好的见解,因此也不要忽视关于该特定问题的答案。

SO网友:Manny Fleurmond

几个月前,当我问了一个类似的问题时,有一些很好的答案here

结束

相关推荐

在cron脚本中对WP网络使用wp_INSERT_POST

我有一个站点网络,我需要通过cron作业将数据导入其中。明显地wp_insert_post 在这种情况下没有意义,因为我不在博客上。。。我在一个cron脚本中。我也读到了switch_to_blog 不推荐使用,但我找不到其他选择。如何设置要发布到的博客?