我将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上运行:
CPU使用率平均为25%-30%,没有峰值和内存使用~600 MB。我没有与磁盘IO利用率相关的数据。
答案 0 :(得分:0)
我在几个magentos上使用https://github.com/colinmollenhour/Cm_Cache_Backend_Redis并且它完美地工作。我知道它并没有真正回答你的问题,但它可能允许解决问题。它允许在local.xml中为magento配置Redis,并与https://github.com/colinmollenhour/Cm_RedisSession链接,对我来说是完美的工作。
此外,您可以尝试直接在服务器中擦除密钥,因为有时数据并不真正连贯。