【问题标题】:Magento, memcached, and tagsMagento、memcached 和标签
【发布时间】:2011-10-22 16:05:44
【问题描述】:

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

请注意:使用此后端,目前不支持将“标签”作为“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 框架或 PHP 的版本是否存在可能影响这一点的差异?我的本地开发服务器正在运行以下内容:

带有 Suhosin-Patch (cli) 的 PHP 5.3.3-1ubuntu9.6(构建时间:2011 年 10 月 14 日 22:31:25) 版权所有 (c) 1997-2009 PHP 集团 Zend Engine v2.3.0,版权所有 (c) 1998-2010 Zend Technologies

我们的开发/实时服务器正在运行:

PHP 5.2.17 (cli)(构建时间:2011 年 6 月 13 日 14:23:24) 版权所有 (c) 1997-2010 PHP 集团 Zend Engine v2.2.0,版权所有 (c) 1998-2010 Zend Technologies

这有什么不同吗?有人对这个有经验么?如果这实际上是一个框架限制,是否有任何已知的解决方法?还是我只是做错了什么?

谢谢!

【问题讨论】:

    标签: php zend-framework magento magento-1.5


    【解决方案1】:

    根据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 中的两个级别缓存的文章:

    【讨论】:

    • 感谢您提供信息以及指向 Fabrizio Branca 帖子的链接。这对帮助我理解缓存是如何工作的很有帮助。不幸的是,它仍然无法正常工作。我添加了一些日志记录并意识到它正在将 slow_backed 实例化为Zend_Cache_Backend_Memcached 的实例。经过进一步调查,我发现我的app/etc 目录中有一个名为local.foo.xml 的文件,其中包含错误配置的信息。我不知道 Magento 会读取该文件并使用其内容。它覆盖了local.xml 中的设置。所以要小心任何额外的文件!
    猜你喜欢
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2018-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多