Wp_cache_set不工作有什么原因吗?

时间:2017-10-27 作者:techtransferportal

wp\\u cache\\u设置不工作的原因是什么?我一直在转动车轮,试图弄明白为什么这些都不起作用。有什么建议吗?这些函数旨在帮助我将结果缓存到键/对象,然后利用键/对象显示信息。但是,它们不存储密钥/对象

$related_post_ids = wp_cache_get( \'related_post_ids\' );
if ( false === $related_post_ids ) {
//seting args and run query
$the_query = new WP_Query( $args );
wp_cache_set(\'related_post_ids\', $the_query, \'\', 300 );
}

2 个回复
SO网友:Howdy_McGee

这个wp_cache_*() 函数是非持久缓存,这意味着它们仅在当前页面请求期间持续。如果您在页面加载期间多次请求相同的信息,这将非常有益。例如,如果您在标题、内容部分和侧栏中显示最近的帖子(调用相同的代码3次以检索最近的帖子),那么缓存结果将是有益的。查看上的抄本WP Object Cache 了解更多信息。

如果要通过多个页面加载保存这些内容,但最终也会使其过期,则可能需要将其另存为transient. 它们的工作方式与WP对象缓存相同,但它们会保存到数据库中一段时间。如果请求并且时间已过,瞬态将过期并返回false。

$related_post_ids = get_transient( \'theme_related_post_ids\' );

if( false === $related_post_ids ) {

    $args = array(
        \'fields\' => \'ids\',  // If we only need IDs, just return IDs
    );
    $the_query = get_posts( $args );

    if( ! empty( $the_query ) ) {
        set_transient( \'theme_related_post_ids\', $the_query, 300 );
    }

}
这取决于你计划得到多少最近的帖子,这可能是徒劳的。300毫秒不是很长的时间,在加载期间调用查询本身可能比尝试通过缓存存储和检索查询更快,但我不知道您的整个用例。

SO网友:Aamer Shahzad

我猜您认为此函数应该设置json object 在浏览器中local storagecache storage. 但事实并非如此。此函数仍以非持久方式缓存。下面的示例可以帮助您更好地理解它。

I have 5 posts displaying on my homepage.

刷新页面时,将加载5篇帖子,加载模板部分\'template-parts/content/content.php\'.

现在,我已经创建了自己的函数来第一次加载模板,并将其缓存4次。

$cache_key = \'home-template-parts\';
$template = wp_cache_get($cache_key, \'template_cache_group\');
if (!$template) {
    $template = locate_template(
        array(
            template_path() . "{$slug}-{$name}.php",
            template_path() . "{$slug}.php",
        ),
        false,
        false
    );
    wp_cache_set($cache_key, $template, \'template_cache_group\');
}
load_template($template, false);
类似WordPressloop, database queries 或者可以缓存多次加载的任何内容。

wp_transient API

另一方面,如果您不小心使用wp\\U瞬态api,那么您的数据库wp_options 随着时间的推移,表将缓慢增长。如果表的大小很大,您的wp\\U瞬态api将很慢。

结束

相关推荐

如何将Zend Optimiser+与Batcache一起启用

我正在使用Batcache 具有APC Object Cache Backend 目前为止互联网上有很多帖子声称使用Zend Optimizer代替APC可以减少CPU和内存的使用。我可以在我的服务器上启用Zend Optimizer。但我还没有找到一个插件或解决方法来让Batchache与Zend Optimizer一起工作。这是Batchache的“Zend Optimizer对象缓存后端”吗?如何让Batchache使用Zend Optimizer?非常感谢。