与magento CE 1.8连接时出现随机redis错误

时间:2014-08-05 11:57:51

标签: magento caching redis

我将magento配置为使用redis后端缓存运行,并且在随机情况下遇到一些连接错误。

错误堆栈跟踪如下所示:

a:4:{i:0;s:24:"read error on connection";i:1;s:1653:"#0 /var/www/mage/lib/Credis/Client.php(440): Credis_Client->__call('select', Array)
#1 /var/www/mage/lib/Cm/Cache/Backend/Redis.php(117): Credis_Client->select(0)
#2 /var/www/mage/lib/Zend/Cache.php(153): Cm_Cache_Backend_Redis->__construct(Array)
#3 /var/www/mage/lib/Zend/Cache.php(94): Zend_Cache::_makeBackend('Cm_Cache_Backen...', Array, true, true)
#4 /var/www/mage/app/code/core/Mage/Core/Model/Cache.php(137): Zend_Cache::factory('Varien_Cache_Co...', 'Cm_Cache_Backen...', Array, Array, true, true, true)
#5 /var/www/mage/app/code/core/Mage/Core/Model/Config.php(1348): Mage_Core_Model_Cache->__construct(Array)
#6 /var/www/mage/app/Mage.php(463): Mage_Core_Model_Config->getModelInstance('core/cache', Array)
#7 /var/www/mage/app/code/core/Mage/Core/Model/App.php(401): Mage::getModel('core/cache', Array)
#8 /var/www/mage/app/code/core/Mage/Core/Model/App.php(295): Mage_Core_Model_App->_initCache(Array)
#9 /var/www/mage/app/code/core/Mage/Core/Model/App.php(337): Mage_Core_Model_App->baseInit(Array)
#10 /var/www/mage/app/Mage.php(684): Mage_Core_Model_App->run(Array)
#11 /var/www/mage/index.php(90): Mage::run('', 'store')
#12 {main}";s:3:"url";s:1:"/";s:11:"script_name";s:10:"/index.php";}

它是由核心magento函数和我的自定义代码引起的。 特别是我的助手之一,我用这种方式缓存:

public function getSomething($id)
{
    if ($cacheResult) {
        $cache = Mage::app()->getCacheInstance();
        $cacheKey = "something_".$id;
        $value = $cache->load($cacheKey);
        if ($value) {
            $value = unserialize($value);
        } else {
            $value = '';
        }
    } else {
        $value = '';
    }
    if(is_array($value)) {
        $result = $value;
    } else {
        $result = $this->api->getSomething($id);
        if ($cacheResult) {
            $cache->save(serialize($result), $cacheKey);
        }
    }

    return $result;
}

任何想法为什么会出现这些错误? 它与我的代码有关吗?应该用不同的方式写出来吗?

它在VPS上运行:

  • vCPU 2000 MHz x 2 vCore
  • 2GB RAM(4GB增强)
  • HDD RAID 10

CPU使用率平均为25%-30%,没有峰值和内存使用~600 MB。我没有与磁盘IO利用率相关的数据。

1 个答案:

答案 0 :(得分:0)

我在几个magentos上使用https://github.com/colinmollenhour/Cm_Cache_Backend_Redis并且它完美地工作。我知道它并没有真正回答你的问题,但它可能允许解决问题。它允许在local.xml中为magento配置Redis,并与https://github.com/colinmollenhour/Cm_RedisSession链接,对我来说是完美的工作。

此外,您可以尝试直接在服务器中擦除密钥,因为有时数据并不真正连贯。