如何在Magento EE 1.12中使用数据库作为slow_backend而不是文件?


14

在Magento EE 1.12.0.0中,无论我对什么配置进行更改,似乎都将app/etc/local.xml继续使用默认文件缓存(通过var/cache/始终填充来证明)。

期望

  • Memcached用作fast_backend。
  • 数据库用作slow_backend。
  • 根本不使用文件缓存(即var/cache/应始终为空)。

实际产量

  • Memcached用作fast_backend。
  • 根本不使用数据库。
  • 正在使用文件缓存。

测试程序

  1. 将配置更改为app/etc/local.xml
  2. 重新启动Memcached和Apache(出于很好的考虑,它在我的本地dev框中,所以我也可以)。
  3. 清除文件缓存(rm -rf var/cache/*)。
  4. 刷新首页。
  5. 检查文件缓存的内容(ls var/cache)。
  6. 感到难过,并通过其他配置更改返回到#1。

配置

我的内容app/etc/local.xml如下:

<config>
    <global>
        <install>
            <date><![CDATA[{{actual_data}}]]></date>
        </install>
        <crypt>
            <key><![CDATA[{{actual_data}}]]></key>
        </crypt>
        <disable_local_modules>false</disable_local_modules>
        <resources>
            <db>
                <table_prefix><![CDATA[]]></table_prefix>
            </db>
            <default_setup>
                <connection>
                    <host><![CDATA[{{actual_data}}]]></host>
                    <username><![CDATA[{{actual_data}}]]></username>
                    <password><![CDATA[{{actual_data}}]]></password>
                    <dbname><![CDATA[{{actual_data}}]]></dbname>
                    <initStatements><![CDATA[SET NAMES utf8]]></initStatements>
                    <model><![CDATA[mysql4]]></model>
                    <type><![CDATA[pdo_mysql]]></type>
                    <pdoType><![CDATA[]]></pdoType>
                    <active>1</active>
                </connection>
            </default_setup>
        </resources>
        <session_save><![CDATA[db]]></session_save>
        <cache>memcached</cache>
        <slow_backend>database</slow_backend>
        <slow_backend_store_data>1</slow_backend_store_data>
        <memcached>
            <servers>
                <server>
                    <host><![CDATA[{{actual_data}}]]></host>
                    <port><![CDATA[{{actual_data}}]]></port>
                    <persistent><![CDATA[0]]></persistent>
                    <weight><![CDATA[2]]></weight>
                    <timeout><![CDATA[10]]></timeout>
                    <retry_interval><![CDATA[10]]></retry_interval>
                    <status><![CDATA[]]></status>
                </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>
    </global>
    <admin>
        <routers>
            <adminhtml>
                <args>
                    <frontName><![CDATA[admin]]></frontName>
                </args>
            </adminhtml>
        </routers>
    </admin>
</config>


我从来没有找到解决这个问题的方法。但是,由于我此后曾在另一家公司的工作下从事其他Magento项目的工作,并且使用的配置与此处所述类似,因此我倾向于认为这是以下其中一个问题:1 . Magento的安装(错误修改/模块/等)2.该公司针对其服务器的预配脚本无法很好地适应Drupal,并且错过了一些东西。3.上帝/自然的举动4.(很可能是)Magento不管如何,@ fantasticrice给出了一个很好的答案,应该帮助Google员工,让他获得大奖!
Robr3rd

Answers:


5

我认为这不是缓存节点的正确格式。我的理解是,所有缓存设置都应嵌套在<cache>节点内。因此,将两级缓存与memcached +数据库一起使用将是这样的:

<cache>
    <backend>memcached</backend>
    <slow_backend>database</slow_backend>
    <memcached>
        <servers>
            <server1>
                <host>...</host>
                <port>11211</port>
                <persistent>1</persistent>
                <weight>2</weight>
                <timeout>10</timeout>
                <retry_interval>10</retry_interval>
                <status/>
            </server1>
            ...
        </servers>
        <compression>0</compression>
        <cache_dir/>
        <hashed_directory_level/>
        <hashed_directory_umask/>
        <file_name_prefix/>
    </memcached>
</cache>

请记住,<full_page_cache>可以完全相同的方式进行配置,并且可以根据需要使用不同的设置。它们只是两个单独的缓存实例。

恰如其分,我强烈建议您使用Redis。它支持标签,因此可以用作单级缓存,并且其性能将比两级memcached +数据库更好。


3
我第二次支持Redis。db缓慢的后端造成的危害大于它的帮助。
philwinkle

我也尝试过这种配置(实际上是我开始使用的配置,因为上面的方法不起作用,建议我发布一个配置)。请问<full_page_cache>可能会被填充var/cache?据我了解,它改为使用var/full_page_cache。我已经使用相同的也试过<cache>...</cache>(你的风格),用于<full_page_cache>enterprise.xml无果。就Redis而言,不幸的是需要使用数据库后端。
Robr3rd 2015年

我只是注意到你有<cache>...<servers>...<server1>...</server1>。是1server1重要?
Robr3rd 2015年

@RobertRobinson-不,除了在之下定义多个节点的方式外,一点都不重要<servers>。您可以像使用server1,server2,server3一样容易地使用foo,bar,baz。如果full_page_cache实例var正在使用文件,则该实例将获得其自己的子目录,这是正确的。
fantasticrice

@RobertRobinson-您可能对该扩展感兴趣,以了解Magento的config的状态
fantasticrice
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.