Magento - 许多相同的缓存请求

时间:2012-08-14 08:12:57

标签: performance magento caching

今天我意识到Magento向我的memcached服务器发出了很多相同的请求,它正在请求密钥 Zend_LocaleC_en_GB_currencynumber _ 。你有谁知道它产生在哪里,我怎样才能改进它?它可能与价格框的渲染有某种关系,但我不明白为什么它在页面中的50次。谢谢,Jaro。

编辑: 到目前为止,我做了快速修复 Zend_Cache_Backend_Memcached ::负载

public function load($id, $doNotTestCacheValidity = false)
{
    if ( isset($GLOBALS[$id]) ) {
        return $GLOBALS[$id];
    }

    $tmp = $this->_memcache->get($id);
    if (is_array($tmp) && isset($tmp[0])) {
        $GLOBALS[$id] = $tmp[0];
        return $tmp[0];
    }
    return false;
}

这不好看但似乎有效。至少许多请求memcached服务器消失了。哈罗。

1 个答案:

答案 0 :(得分:2)

这是Zend Framework社区中的已知问题之一。它甚至被报道为1.0.3版本的改进(http://framework.zend.com/issues/browse/ZF-2311)。

你修复Magento很有意义,在那里执行了许多对Zend_Currency的调用,并且与memcached的连接有一些限制或足够慢。

例如,在大多数项目中,我们使用memcached,并且在此调用中没有经历过大的页面加载时间损失。

但是你可以在Magento中修复它以使用ZF进行解决方法:

  1. 在模块中重写核心/区域设置模型

  2. 覆盖currency()方法

    public function currency($currency)
    {
         if (!isset(self::$_currencyCache[$this->getLocaleCode()][$currency])) {
            $currencyObject = parent::currency($currency);
            $currencyObject->setFormat(array(
                'format' => Zend_Locale_Data::getContent($this->getLocale(), 'currencynumber')
            ));
            return $currencyObject;
         }
         return parent::currency($currency);
    }