Magento Memcached Sessions

时间:2011-06-06 17:01:25

标签: session magento memcached

我目前正在尝试使用以下设置为Magento设置生产环境:

2x Web服务器,1x数据库服务器,负载均衡器。

因此,负载均衡器将在Web服务器之间分配流量,但不会使用粘性会话。

解决我选择使用Memcached的服务器之间共享会话的问题。我在每个Web服务器上运行了一个Memcached服务器,然后在每个Web服务器上的local.xml中指定了memcached服务器列表。

缓存正在运行,因为我肯定会注意到速度的提高,而且我可以看到会话正在跨Web服务器共享。问题在于缓存工作得太好了。页面的动态部分(例如购物车和消息)将完全针对每个页面进行缓存。

我注意到你调用把它放在页面上的getChildHtml()有一个名为useCache的可选参数,我明确地传入了false,但这没有任何作用。这是我的local.xml定义,以防我在那里做错了(敏感信息已被遗漏):

<config>
<global>
    <install>
        <date></date>
    </install>
    <crypt>
        <key></key>
    </crypt>
    <disable_local_modules>false</disable_local_modules>
    <resources>
        <db>
            <table_prefix></table_prefix>
        </db>
        <default_setup>
            <connection>
            </connection>
        </default_setup>
    </resources>
    <session_save><![CDATA[memcache]]></session_save> <!-- db / memcache / empty=files -->
    <session_save_path><![CDATA[tcp://X.X.X.X:11211?persistent=1&weight=2&timeout=10&retry_interval=10]]></session_save_path><!-- e.g. for memcache session save handler tcp://10.0.0.1:11211?persistent=1&weight=2&timeout=10&retry_interval=10 -->
    <session_cache_limiter><![CDATA[private]]></session_cache_limiter><!-- see http://php.net/manual/en/function.session-cache-limiter.php#82174 for possible values -->
    <cache>
        <backend>memcached</backend><!-- apc / memcached / xcache / empty=file -->
        <slow_backend>database</slow_backend> <!-- database / file (default) - used for 2 levels cache setup, necessary for all shared memory storages -->
        <slow_backend_store_data></slow_backend_store_data> <!-- 1 / 0 (default) - used for 2 levels cache setup, sets whether store data in db slow cache backend -->
        <auto_refresh_fast_cache>1</auto_refresh_fast_cache> <!-- 1 / 0 (default) - used for 2 levels cache setup, sets whether refresh data in fast cache backend -->
        <memcached><!-- memcached cache backend related config -->
            <servers><!-- any number of server nodes can be included -->
                <server>
                    <host><![CDATA[X.X.X.X]]></host>
                    <port><![CDATA[11211]]></port>
                    <persistent><![CDATA[1]]></persistent>
                </server>
                <server>
                    <host><![CDATA[X.X.X.X]]></host>
                    <port><![CDATA[11211]]></port>
                    <persistent><![CDATA[1]]></persistent>
                </server>
            </servers>
        </memcached>
    </cache>
</global>
<admin>
    <routers>
        <adminhtml>
            <args>
                <frontName><![CDATA[admin]]></frontName>
            </args>
        </adminhtml>
    </routers>
</admin>

我还注意到其他一些奇怪的行为,比如能够在管理面板上的缓存管理屏幕中清除缓存。在Magento中使用memcached时这是正常的吗?我如何解决整个页面被缓存的问题?

2 个答案:

答案 0 :(得分:4)

对于那些仍然遇到类似问题的人,我设法解决了我的问题。我在这里遇到的主要问题是我在每个Web节点上使用不同的memcached服务器,这是不正确的,因为它使用您的会话作为查找缓存数据的密钥。此外,您需要确保将服务器标记中的持久元素设置为0而不是1.使用这些设置,网站现在工作正常。

答案 1 :(得分:1)

tcp://X.X.X.X:11211?persistent=0

喜欢这个吗?

或更像是:

<server>
  <host><![CDATA[xx.xx.x.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[]]></status>
</server>