使用sfMemcache从模型中选择性缓存清除

时间:2014-02-24 11:09:52

标签: caching memcached symfony-1.4

我有一个多语言网站(文化取决于主机网址,例如:uk.site.com,fr.site.com等)。我在前端缓存部分并设置其缓存键。然后从模型中我做了类似的事情:

$cacheManager = sfContext::getInstance()->getViewCacheManager();
$cacheUri = $cacheManager->getPartialUri($module, $action, $cacheKey);
$cacheManager->remove($cacheUri, *); //second param is to clear this cache for all hosts
// $cacheManager->remove($cacheUri); when is like that it works for fine but only for the domain it's been called from.

上面的代码调用了sf核心方法sfMemCache->removePattern($pattern),它具有:

$regexp = self::patternToRegexp($this->getOption('prefix').$pattern);
foreach ($this->getCacheInfo() as $key)
{
  if (preg_match($regexp, $key))
  {
    $this->remove(substr($key, strlen($this->getOption('prefix'))));
  }
}

$this->getCacheInfo()始终为空,无法清除任何内容。 alawys抛出“要使用”removePattern“方法,必须将”storeCacheInfo“选项设置为”true“。”例外。我无法找到cacheInfos()必须填充的位置或它的角色究竟是什么。

我的questin的简化版本是:“为什么$ this-> getCacheInfo为空”

1 个答案:

答案 0 :(得分:1)

如果removePattern方法抛出该错误,则在factories.yml配置中未正确配置memcached。

您想要的答案将在this page的标题' Alternative Caching storage'

标题下讨论

您需要正确设置类和参数才能使用removePattern方法。例如:

view_cache:
    class: sfMemcacheCache
    param:
      host: localhost
      port: 11211
      persistent: true
      storeCacheInfo: true

您还需要确保memcached守护程序可以运行。如果memcached与其默认配置中的脚本在同一主机上运行,​​则上述设置应该没问题。如果您在单独的主机上运行memcached,或者您有多个主机共享一个memcached服务,那么您必须确保您的主机,端口和防火墙设置适合您的环境。