Como usar o banco de dados como slow_backend em vez de arquivos no Magento EE 1.12?

14

No Magento EE 1.12.0.0 Parece que, independentemente de quais alterações de configuração eu faço app/etc/local.xml, o cache de arquivos padrão continua a ser usado (o que é evidenciado pelo var/cache/preenchimento sempre).

Expectativa

  • Memcached é usado como fast_backend.
  • O banco de dados é usado como slow_backend.
  • O cache do arquivo não é usado (ou seja var/cache/, sempre deve estar vazio).

Saída real

  • Memcached é usado como fast_backend.
  • O banco de dados não é usado.
  • O cache do arquivo está sendo usado.

Procedimento de teste

  1. Faça a alteração da configuração para app/etc/local.xml.
  2. Reinicie o Memcached e o Apache (apenas por uma boa medida e está na minha caixa de desenvolvimento local, para que eu também).
  3. Limpe o cache do arquivo ( rm -rf var/cache/*).
  4. Atualize a página inicial.
  5. Verifique o conteúdo do cache do arquivo ( ls var/cache).
  6. Fique triste e retorne ao # 1 com uma alteração de configuração diferente.

O Config

O conteúdo do meu app/etc/local.xmlé o seguinte:

<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
fonte
1
Como um aparte, leitura obrigatória: TwoLevels Cache Backend Mess do Magento / Zend Framework
benmarks
Eu nunca encontrei uma solução para esse problema; entretanto, como já trabalhei em outros projetos Magento sob o emprego de uma empresa diferente e utilizei configurações semelhantes às descritas aqui, estou inclinado a acreditar que houve um problema com um dos seguintes: 1. Essa instalação do Magento modificações / módulos / etc) 2. Os scripts de provisionamento da empresa para seus servidores estão sendo pouco adaptados do Drupal e algumas coisas foram perdidas 3. Ato de Deus / Natureza 4. (provavelmente) É Magento Independentemente disso, @fantasticrice deu uma ótima resposta que deveria ajude Googlers, para que ele receba o prêmio!
precisa saber é o seguinte

Respostas:

5

Eu acho que esse não é o formato certo para os nós de cache. Meu entendimento é que todas as configurações de cache devem ser aninhadas dentro do <cache>nó. Portanto, para usar o cache de dois níveis com o banco de dados memcached +, seria algo como isto:

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

Lembre-se de que <full_page_cache>pode ser configurado exatamente da mesma maneira e, se desejar, pode usar configurações diferentes. São apenas duas instâncias de cache separadas.

Assim como uma nota lateral, eu altamente recomendo usando Redis vez. Ele suporta tags, para que possa ser usado como um cache de nível único e terá um desempenho muito melhor que o banco de dados memcached + de dois níveis.

fantasticrice
fonte
3
Eu apóio a defesa dos Redis. O back-end lento do banco de dados causa mais danos do que ajuda.
philwinkle
Eu também tentei essa configuração (é na verdade o que eu comecei - a que eu publiquei foi sugerida como uma alternativa, pois as opções acima não estavam funcionando). O <full_page_cache>possivelmente estaria preenchendo var/cache? É meu entendimento que ele usa var/full_page_cache. Eu também tentei usar o mesmo <cache>...</cache>(seu estilo) para <full_page_cache>e enterprise.xmlsem sucesso. No que diz respeito ao Redis, infelizmente, usar o back-end do banco de dados é o requisito.
precisa saber é o seguinte
Acabei de perceber que você tem <cache>...<servers>...<server1>...</server1>. É a 1de server1importante?
precisa saber é o seguinte
@RobertRobinson - não, não é importante, exceto como uma maneira de definir vários nós <servers>. Você poderia usar foo, bar, baz tão facilmente quanto server1, server2, server3. Você está certo de que a full_page_cacheinstância obtém seu próprio subdiretório varse estiver usando arquivos.
fantasticrice
@RobertRobinson - você pode estar interessado nesta extensão para ver o status da configuração do Magento .
fantasticrice