Memcached在Magento不工作

时间:2012-11-14 18:13:38

标签: magento session caching memcached scalr

我使用Scalr.net在AWS上进行了集群设置。我正在运行Magento CE 1.7:

  • 1 Nginx Loadbalancer Server
  • 2个Apache Web服务器
  • 1数据库服务器
  • 1 Memcached Server

目的是在memcached服务器上存储文件缓存和会话缓存。我已经设置了magento local.xml:

<session_save><![CDATA[memcache]]></session_save>
<session_save_path><![CDATA[tcp://XX.XX.XX.XX:11211?persistent=1&weight=2&timeout=10&retry_interval=10]]></session_save_path>
<session_cache_limiter><![CDATA[]]></session_cache_limiter>
<cache>
        <backend>memcached</backend>
        <slow_backend>database</slow_backend>
        <slow_backend_store_data><![CDATA[]]></slow_backend_store_data>
        <auto_refresh_fast_cache><![CDATA[]]></auto_refresh_fast_cache>
        <lifetime>259200</lifetime>
    <backend_options>
    <servers>
    <server>
        <host><![CDATA[XX.XX.XX.XX]]></host>
        <port><![CDATA[11211]]></port>
        <persistent><![CDATA[0]]></persistent>
        <weight><![CDATA[2]]></weight>
        <timeout><![CDATA[10]]></timeout>
        <retry_interval><![CDATA[10]]></retry_interval>
        <status><![CDATA[1]]></status>
    </server>
    </servers>
        <compression><![CDATA[0]]></compression>
    </backend_options>
</cache> 

但Memcached不起作用。以下是我的统计数据:

root@ec2-XX.XX.XX.XX:~# telnet ip-XX.XX.XX.XX 11211
Trying XX.XX.XX.XX...
Connected to ip-XX.XX.XX.XX.ec2.internal.
Escape character is '^]'.
stats
STAT pid 1086
STAT uptime 79364
STAT time 1352912987
STAT version 1.4.2
STAT pointer_size 64
STAT rusage_user 2.340000
STAT rusage_system 0.000000
STAT curr_connections 5
STAT total_connections 11
STAT connection_structures 6
STAT cmd_get 0
STAT cmd_set 0
STAT cmd_flush 0
STAT get_hits 0
STAT get_misses 0
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT bytes_read 28
STAT bytes_written 2194
STAT limit_maxbytes 67108864
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT bytes 0
STAT curr_items 0
STAT total_items 0
STAT evictions 0
END

此外,该网站会抛出这些错误:

a:4:{i:0;s:29:"cache_dir must be a directory";i:1;s:1097:"#0 /var/www/includes/src/Zend_Cache_Backend_File.php(154): Zend_Cache::throwException('cache_dir must ...')
#1 /var/www/includes/src/Zend_Cache_Backend_File.php(121): Zend_Cache_Backend_File->setCacheDir('')
#2 /var/www/includes/src/__default.php(60504): Zend_Cache_Backend_File->__construct(Array)
#3 /var/www/includes/src/__default.php(60445): Zend_Cache::_makeBackend('File', Array, true, true)
#4 /var/www/includes/src/Mage_Core_Model_Cache.php(124): Zend_Cache::factory('Varien_Cache_Co...', 'File', Array, Array, true, true, true)
#5 /var/www/includes/src/__default.php(23463): Mage_Core_Model_Cache->__construct(Array)
#6 /var/www/app/Mage.php(462): Mage_Core_Model_Config->getModelInstance('core/cache', Array)
#7 /var/www/includes/src/__default.php(20134): Mage::getModel('core/cache', Array)
#8 /var/www/includes/src/__default.php(20028): Mage_Core_Model_App->_initCache(Array)
#9 /var/www/includes/src/__default.php(20070): Mage_Core_Model_App->baseInit(Array)
#10 /var/www/app/Mage.php(683): Mage_Core_Model_App->run(Array)
#11 /var/www/index.php(87): Mage::run('', 'store')
#12 {main}";s:3:"url";s:1:"/";s:11:"script_name";s:10:"/index.php";}

如果我在后端选项中包含以下内容:

        <cache_dir><![CDATA[]]></cache_dir>
        <hashed_directory_level><![CDATA[]]></hashed_directory_level>
        <hashed_directory_umask><![CDATA[]]></hashed_directory_umask>
        <file_name_prefix><![CDATA[]]></file_name_prefix>

非常感谢您的帮助。感谢。

3 个答案:

答案 0 :(得分:4)

我的local.xml在<memcache>内有<cache>部分,<backend>Memcached</backend>大写:

    ...
    <cache>
            <backend>Memcached</backend>
            <slow_backend>database</slow_backend>
            <backend_options>
    ...
            </backend_options>
            <memcached>
                    <servers>
                            <server>
                                    <host><![CDATA[127.0.0.1]]></host>
                                    <port><![CDATA[11211]]></port>
                                    <persistent><![CDATA[0]]></persistent>
                            </server>
                    </servers>
                    <compression><![CDATA[0]]></compression>
                    <cache_dir><![CDATA[]]></cache_dir>
                    <hashed_directory_level><![CDATA[]]></hashed_directory_level>
                    <hashed_directory_umask><![CDATA[]]></hashed_directory_umask>
                    <file_name_prefix><![CDATA[]]></file_name_prefix>
            </memcached>
    </cache>
    ...

此外,您将需要运行两个memcache实例,即使用端口11211进行会话,使用11212进行缓存。我有两个文件:/etc/memcache_1.conf和/etc/memcache_2.conf设置这些不同的实例。这样,当您清除缓存时,它不会注销所有用户!

答案 1 :(得分:3)

我在我的系统中看到了这个问题。一个非常重要且容易遗漏的事情......如果你使用memcache,那么save_path必须有“tcp://”前缀,如果你使用memcached,那么save_path不应该有“tcp://”前缀。< / p>

答案 2 :(得分:0)

我有完全相同的问题,craigtadlock建议的解决方案完美无缺。 这是完整的配置:

<session_save><![CDATA[memcached]]></session_save>
<session_save_path><![CDATA[127.0.0.1:11211?persistent=1&weight=2&timeout=10&retry_interval=10]]></session_save_path>

请注意,session_save中的值是&#39; memcached&#39;,而不是&#39; memcache&#39;与local.xml.additional一样。