2011-06-06 85 views
4

目前我試圖建立了Magento的生產環境具有以下設置:Magento的Memcached的會話

2個Web服務器,1個DB服務器,負載平衡器。

因此,負載平衡器將分配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時這是正常的,我該如何解決整個頁面被緩存的問題?

+0

哪個Magento的版本? – B00MER 2011-06-06 18:18:41

+0

最新的穩定版本是1.5.1.0。 – Dino 2011-06-06 18:36:45

回答

4

對於任何仍然有類似問題的人,我設法解決我的問題。我在這裏遇到的主要問題是,我在每個Web節點上使用了不同的memcached服務器,這是不正確的,因爲它使用會話作爲查找緩存數據的關鍵。此外,您需要確保您將服務器標記中的持久元素設置爲0而不是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> 
+1

我在這裏看到一個答案,但它並不是很明顯。考慮修改?它看起來更像是一個澄清的要求。 – 2011-08-30 05:48:19

+0

這是關於將持久性設置爲0. 實際上有兩種方法。 – Barry 2011-10-18 08:56:53