2011-10-22 39 views
0

我已经花了上周的更好的一部分配置和调整我们的Magento商店的缓存,它在我的dev安装上工作得很好。我有Tinybrick的Lightspeed和Speedbooster扩展以及一些自定义功能。当我编辑产品时,它会进行全页面缓存并正确刷新正确的标签,以便只有受影响的页面才会被刷新。我最初使用文件缓存进行设置,只是将其切换到Memcached。在我的本地开发服务器上,这仍然很好。当我将它放在与我们的实时站点相同的环境中运行的远程开发服务器上时,这无法按预期工作。大多数情况下它是好的,但是当我编辑产品时,我必须刷新整个缓存以查看更改。做一些研究之后,我已经了解到,Memcached的不通过匹配标签支持冲洗......至少这是我从Zend文档理解:Magento,memcached和标签

注意:这个后端,“标签”都没有目前支持“doNotTestCacheValidity = true”参数。

另外,如果你看一下在clean功能的源文件Zend/Cache/Backend/Memcached.php

case Zend_Cache::CLEANING_MODE_MATCHING_TAG: 
case Zend_Cache::CLEANING_MODE_NOT_MATCHING_TAG: 
case Zend_Cache::CLEANING_MODE_MATCHING_ANY_TAG: 
    $this->_log(self::TAGS_UNSUPPORTED_BY_CLEAN_OF_MEMCACHED_BACKEND); 
    break; 

然而,我的本地开发服务器上,它似乎是工作的罚款,我真的可以”解释。所以这引发了一个问题,“为什么?”。 Zend Framework或PHP的版本可能会有不同的影响吗?我的本地开发服务器运行的是以下几点: 版权所有(C)1997-2009:用了Suhosin贴片(CLI)(2011年10月14日22点31分25秒内置)

PHP 5.3.3-1ubuntu9.6 PHP的集团 Zend引擎V2.3.0,版权所有(C)1998-2010 Zend技术

我们的开发/直播服务器运行的是这样的:

PHP 5.2.17(CLI)(内置: 2011年6月13日14:23:24) 版权所有(c)1997-2010 PHP集团 Zend Engine v2.2.0,版权所有(c)1998-2010 Zend技术

这可能是区别?有人对这个有经验么?如果这实际上是一个框架限制,是否有任何已知的解决方法?或者我只是做错了什么?

谢谢!

回答

3

根据这个jira ticket,几乎zf中的所有后端都不支持标签。您建议改用混合后端Zend_Cache_Backend_TwoLevels。而magento已经在使用它!看看Mage_Core_Model_Cache::_getBackendOptions()。所以,现在我们应该考虑Zend_Cache_Backend_TwoLevels::clean()源代码,例如:

 case Zend_Cache::CLEANING_MODE_MATCHING_TAG: 
      $ids = $this->_slowBackend->getIdsMatchingTags($tags); 
      $res = true; 
      foreach ($ids as $id) { 
       $bool = $this->remove($id); 
       $res = $res && $bool; 
      } 
      return $res; 
      break; 

正如你所看到的,ZF会在后台缓慢标签和标签是否被发现 - 它来自后端删除它们。所以,你的低端后端发生了什么错误,或者标签存在于快速后端,但不存在于慢后端(一些后端同步问题)。

您可以阅读描述在Magento 2级LEVE缓存下面的文章:

+0

谢谢你的信息和链接,法布里奇奥布兰卡帖子。这对帮助我理解缓存如何工作非常有用。不幸的是它仍然无法正常工作。我添加了一些日志记录,并意识到它将实例化slow_backed作为'Zend_Cache_Backend_Memcached'的一个实例。经过进一步调查,我发现我的'app/etc'目录中有一个名为'local.foo.xml'的文件,其中有错误配置的信息。我不知道Magento会读取该文件并使用其内容。它覆盖了'local.xml'中的设置。所以要小心任何额外的文件! – BrianVPS