我正在Wordpress 3.5.2上使用W3 Total Cache 0.9.2.11。我对瞬态API和w3tc的对象缓存设置有问题。
当我使用memcached激活“对象缓存”(其他设置为默认设置)时,瞬态API停止工作。其行为是:当我在set\\u transient()之后的过期时间内调用get\\u transient()时,我得到null。
当“对象缓存”被激活时,行为是一致的,当它被停用时,它会完美地工作。文档中没有提到set_transient
调用可能失败。
我尝试了调试模式w3tc对象缓存。该页面显示了大约1000到2000个对象缓存条目。我不太明白每个条目的名称,但我的瞬时值不在那里。
我想知道我是否忽略了任何设置?这是什么原因?
Update:我还注意到刷新页面会get_transient
返回所需的输出。它是这样的:
首先set_transient
, get_transient
返回null秒set_transient
, get_transient
返回第一个值,第三个值set_transient
, get_transient
返回第二个值set_transient
是否需要更长的时间才能完成,是否有任何关于w3tc是否已使此调用异步的参考?如果是,我该如何应对?
SO网友:doublesharp
我也遇到了同样的问题,并通过扩展Andy的解决方案得以纠正,但我只需要强制值,尤其是不要使用W3TC的对象缓存。我尝试使用APC、Memcached以及Disk for the cache,结果相同。缓存当然有助于提高性能,而我遇到问题的代码不是我自己的(插件),因此内联修改它不是一个选项。。。。输入筛选器/操作。我能够通过使用以下方法使其工作,替换TRANSIENT_KEY
使用要禁用缓存的键:
global $_wp_using_ext_object_cache_prev;
function disable_linked_in_cached($value=null){
global $_wp_using_ext_object_cache;
$_wp_using_ext_object_cache_prev = $_wp_using_ext_object_cache;
$_wp_using_ext_object_cache = false;
return $value;
}
add_filter( \'pre_set_transient_TRANSIENT_KEY\', \'disable_linked_in_cached\' );
add_filter( \'pre_transient_TRANSIENT_KEY\', \'disable_linked_in_cached\' );
add_action( \'delete_transient_TRANSIENT_KEY\', \'disable_linked_in_cached\' );
function enable_linked_in_cached($value=null){
global $_wp_using_ext_object_cache;
$_wp_using_ext_object_cache = $_wp_using_ext_object_cache_prev;
return $value;
}
add_action( \'set_transient_TRANSIENT_KEY\', \'disable_linked_in_cached\' );
add_filter( \'transient_TRANSIENT_KEY\', \'enable_linked_in_cached\' );
add_action( \'deleted_transient_TRANSIENT_KEY\', \'disable_linked_in_cached\' );
SO网友:Andy Adams
我遇到了这个问题,这确实是由于W3缓存造成的。我推导出了一种在执行代码时暂时关闭对象缓存的方法,这种方法适用于我的用例。代码如下所示:
// We need to turn off the object cache temporarily while we deal with transients,
// as the W3 Total Cache conflicts with our work
global $_wp_using_ext_object_cache;
$_wp_using_ext_object_cache_previous = $_wp_using_ext_object_cache;
$_wp_using_ext_object_cache = false;
// ...do some work with transients here...
$_wp_using_ext_object_cache = $_wp_using_ext_object_cache_previous;
WordPress检查
$_wp_using_ext_object_cache
为了确定是否应该使用对象缓存,所以我们在工作时暂时禁用它。希望对别人有帮助!