Как использовать базу данных как slow_backend вместо файлов в Magento EE 1.12?

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 (просто для хорошей меры, и он на моем локальном устройстве разработчика, так что я могу также).
  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>
Robr3rd
источник
1
Кроме того, необходимо прочитать: Magento / Zend Framework - двухуровневый кеш-
бэк-бэнд
Я никогда не находил решения этой проблемы; однако, так как я с тех пор работал над дополнительными проектами Magento под управлением другой компании и использовал конфигурации, подобные описанным здесь, я склонен полагать, что это была проблема с одним из: 1. Эта установка Magento (плохая модификации / модули / и т. д.) 2. Скрипты обеспечения компании для своих серверов плохо адаптированы из Drupal, и некоторые вещи были пропущены 3. Закон Бога / Природы 4. (Скорее всего) Это Magento Независимо от того, @fantasticrice дал отличный ответ, который должен помогите гуглерам, чтобы он получил приз!
Robr3rd

Ответы:

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 +.

fantasticrice
источник
3
Я второй адвокат для Redis. Бэкэнд медленной базы данных наносит больше вреда, чем помогает.
Philwinkle
Я также попробовал эту конфигурацию (на самом деле это то, с чего я начал - тот, который я разместил, был предложен в качестве альтернативы, поскольку вышеописанное не работало). Будет ли <full_page_cache>возможно заполнение var/cache? Я понимаю, что вместо этого он использует var/full_page_cache. Я также пытался использовать то же самое <cache>...</cache>(ваш стиль) для <full_page_cache>и enterprise.xmlбезрезультатно. Что касается Redis, то, к сожалению, использование базы данных БД является обязательным требованием.
Robr3rd
Я просто заметил, что у вас есть <cache>...<servers>...<server1>...</server1>. Является ли 1в server1важный?
Robr3rd
@RobertRobinson - нет, не важно, кроме как как способ определения нескольких узлов в <servers>. Вы можете использовать foo, bar, baz так же легко, как server1, server2, server3. Вы правы, что full_page_cacheэкземпляр получает свой собственный подкаталог, varесли он использует файлы.
fantasticrice
@RobertRobinson - это расширение может заинтересовать вас, чтобы увидеть состояние конфигурации Magento .
fantasticrice