Zend_Cache - 检索过期数据?

时间:2012-01-25 12:07:05

标签: web-services zend-framework zend-cache

我正在使用Zend_Cache来缓存从Web服务生成的数据。但是,如果Web服务没有响应,我想显示过时的信息,而不是留空格。

根据文档,答案是将第二个参数传递给Zend_Cache_Core::load()

@param  boolean $doNotTestCacheValidity If set to true, the cache validity won't be tested

但是,对于我已完成的每项测试,对于过期的缓存内容,始终返回bool(false)

有没有办法强制Zend_Cache返回给定缓存密钥的缓存数据,即使它已经过期了?

$cache_key = md5($url);
if ($out = $cache->load($cache_key)) {
  return $out;
}

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);

if ($output) {
  // Process...
  $cn_cache->save($out, $cache_key);
} else {
  // The query has timed out/web service not responded
  // We need to load the outdated cached content... but the following DOES NOT work
  return $cache->load($cache_key, true);

  // var_dump($cache->load($cache_key, true)); # false
}

1 个答案:

答案 0 :(得分:1)

除了拥有永远不会过期的对象的第二个缓存版本之外,我无法想到一个可靠的方法。如果在对象上设置X秒的缓存过期时间,则无法保证在X秒后对象仍然存在。

以下建议的解决方法......

...
$cache_key_forever = sha1($url)
if ($output) {
  // Process...
  $cn_cache->save($out, $cache_key);
  $cn_cache->save($out, $cache_key_forever, array(), null); // The "null" parameter is the important one here: save cache indefinitely
} else {
  // The query has timed out/web service not responded
  // Load the infinitely persisted cache object
  return $cache->load($cache_key_forever);

  // var_dump($cache->load($cache_key, true)); # false
}