Cursos Magento

Como habilitar e configurar o Redis no Magento

, , ,

Publicado em 11 de dezembro de 2018

Neste artigo veremos como habilitar o Redis no Magento 1. Caso esteja procurando como habilitar o Redis no Magento 2 consulte este link.

O que é Redis e como isso pode melhorar meu Magento?

O Redis é um projeto open source que permite salvar dados estruturados em memória (ram) usando um banco de dados de chave-valor.

O Magento vem preparado para ser integrado com este tipo de memória e permite salvar arquivos de cache e sessão direto no Redis, ao invés de salvar em disco ou banco de dados.

Como sabemos, o acesso à memória ram é muito mais rápido que o acesso aos arquivos em disco ou mesmo ao banco de dados mysql.

Verificando disponibilidade

A maioria das hospedagens especializadas em Magento fornecem Redis mesmo nos planos mais básicos.

Uma forma simples de verificar se sua hospedagem possuí o Redis instalado é logando no console (ssh) e digitando redis-cli.

Configurando Magento 1 com Redis

O módulo responsável por salvar dados da session no Redis é o Cm_RedisSession, nativo mesmo nas versões Open Source do Magento.

Toda a configuração é feita no arquivo app/etc/local.xml. Por padrão, a maioria dos servidores Redis são configurados na porta 6379,  e isso facilita bastante nosso trabalho.

Na pasta app/etc você encontra o arquivo local.xml.additionalque contém um exemplo de configuração Redis para cache comum, session e até full page cache, além de exemplos de configuração de memcached.

Cache com Redis no Magento 1

Para fazer com que o magento passe a salvar os arquivos de cache em memória ram ao invés de salvar na pasta var/cache, basta copiarmos o trecho abaixo no arquivo local.xml.additional para o nosso app/etc/local.xml.

<config>
    <global>
        <!-- example of redis cache -->
        <cache>
            <backend>Cm_Cache_Backend_Redis</backend>
            <backend_options>
                <server>127.0.0.1</server>                               <!-- or absolute path to unix socket -->
                <port>6379</port>
                <persistent></persistent>                                <!-- Specify unique string to enable persistent connections. E.g.: sess-db0; bugs with phpredis and php-fpm are known: https://github.com/nicolasff/phpredis/issues/70 -->
                <database>0</database>                                   <!-- Redis database number; protection against accidental data loss is improved by not sharing databases -->
                <password></password>                                    <!-- Specify if your Redis server requires authentication -->
                <force_standalone>0</force_standalone>                   <!-- 0 for phpredis, 1 for standalone PHP -->
                <connect_retries>1</connect_retries>                     <!-- Reduces errors due to random connection failures; a value of 1 will not retry after the first failure -->
                <read_timeout>10</read_timeout>                          <!-- Set read timeout duration; phpredis does not currently support setting read timeouts -->
                <automatic_cleaning_factor>0</automatic_cleaning_factor> <!-- Disabled by default -->
                <compress_data>1</compress_data>                         <!-- 0-9 for compression level, recommended: 0 or 1 -->
                <compress_tags>1</compress_tags>                         <!-- 0-9 for compression level, recommended: 0 or 1 -->
                <compress_threshold>20480</compress_threshold>           <!-- Strings below this size will not be compressed -->
                <compression_lib>gzip</compression_lib>                  <!-- Support gzip, lzf, lz4 (https://github.com/kjdev/php-ext-lz4) or snappy (https://github.com/goatherd/php-snappy) -->
                <use_lua>0</use_lua>                                     <!-- Set to 1 if Lua scripts should be used for some operations -->
            </backend_options>
        </cache>
    </global>
</config>

Full Page cache com Redis no Magento 1

O mesmo vale para o full_page_cache.

<config>
    <global>
        <!-- example of redis Magento Enterprise FPC -->
        <full_page_cache>
            <backend>Cm_Cache_Backend_Redis</backend>
            <backend_options>
                <server>127.0.0.1</server>              <!-- or absolute path to unix socket -->
                <port>6379</port>
                <persistent></persistent>               <!-- Specify unique string to enable persistent connections. E.g.: sess-db0; bugs with phpredis and php-fpm are known: https://github.com/nicolasff/phpredis/issues/70 -->
                <database>1</database>                  <!-- Redis database number; protection against accidental data loss is improved by not sharing databases -->
                <password></password>                   <!-- Specify if your Redis server requires authentication -->
                <force_standalone>0</force_standalone>  <!-- 0 for phpredis, 1 for standalone PHP -->
                <connect_retries>1</connect_retries>    <!-- Reduces errors due to random connection failures -->
                <lifetimelimit>57600</lifetimelimit>    <!-- 16 hours of lifetime for cache record -->
                <compress_data>0</compress_data>        <!-- DISABLE compression for EE FPC since it already uses compression -->
            </backend_options>
        </full_page_cache>

    </global>
</config>

Lembre-se de ativar o Full Page Cache em Sistema->Configuração->Avançado->Sistema->External Full Page Cache Settings.

Full Page Cache Config Magento 1

Session com Redis

E para salvar os dados de sessão em memória:

<config>
    <global>
        <!-- example of redis session storage -->
        <session_save>db</session_save>
        <redis_session>                                          <!-- All options seen here are the defaults -->
            <host>127.0.0.1</host>                               <!-- Specify an absolute path if using a unix socket -->
            <port>6379</port>
            <password></password>                                <!-- Specify if your Redis server requires authentication -->
            <timeout>2.5</timeout>                               <!-- This is the Redis connection timeout, not the locking timeout -->
            <persistent></persistent>                            <!-- Specify unique string to enable persistent connections. E.g.: sess-db0; bugs with phpredis and php-fpm are known: https://github.com/nicolasff/phpredis/issues/70 -->
            <db>0</db>                                           <!-- Redis database number; protection from accidental loss is improved by using a unique DB number for sessions -->
            <compression_threshold>2048</compression_threshold>  <!-- Set to 0 to disable compression (recommended when suhosin.session.encrypt=on); known bug with strings over 64k: https://github.com/colinmollenhour/Cm_Cache_Backend_Redis/issues/18 -->
            <compression_lib>gzip</compression_lib>              <!-- gzip, lzf, lz4 (https://github.com/kjdev/php-ext-lz4) or snappy (https://github.com/goatherd/php-snappy) -->
            <log_level>1</log_level>                             <!-- 0 (emergency: system is unusable), 4 (warning; additional information, recommended), 5 (notice: normal but significant condition), 6 (info: informational messages), 7 (debug: the most information for development/testing) -->
            <max_concurrency>6</max_concurrency>                 <!-- maximum number of processes that can wait for a lock on one session; for large production clusters, set this to at least 10% of the number of PHP processes -->
            <break_after_frontend>5</break_after_frontend>       <!-- seconds to wait for a session lock in the frontend; not as critical as admin -->
            <break_after_adminhtml>30</break_after_adminhtml>
            <first_lifetime>600</first_lifetime>                 <!-- Lifetime of session for non-bots on the first write. 0 to disable -->
            <bot_first_lifetime>60</bot_first_lifetime>          <!-- Lifetime of session for bots on the first write. 0 to disable -->
            <bot_lifetime>7200</bot_lifetime>                    <!-- Lifetime of session for bots on subsequent writes. 0 to disable -->
            <disable_locking>0</disable_locking>                 <!-- Disable session locking entirely. -->
            <min_lifetime>60</min_lifetime>                      <!-- Set the minimum session lifetime -->
            <max_lifetime>2592000</max_lifetime>                 <!-- Set the maximum session lifetime -->
        </redis_session>
    </global>
</config>

Lembre-se de remover ou comentar o nó original <session_save><![CDATA[files]]></session_save>.

 

O que você precisa saber

Uma vez que o controle do cache passa a estar no Redis, nem tudo pode ser gerenciado via painel.

Quando você quiser limpar todos os caches do Magento o painel de controle pode não ser suficiente.

Como vimos acima, nós configuramos 3 databases diferentes através das diretivas <db> e <database> no nosso local.xml.

Com o comando flushdb podemos limpar toda base selecionada, como vemos no exemplo abaixo:

 

Testando e validando

Pra saber se o Redis está sendo usado, basta entrar em cada database (select <db>) e listar todos os registros (keys *).

Com isso, podemos entrar em cada database que configuramos acima e ver se os dados estão sendo gravados lá.

 

Aviso: sua loja nunca mais será a mesma (que bom!)

Esta é sem dúvida a forma mais rápida de otimizar radicalmente a performance de uma loja Magento.

Em um teste simples em ambiente local, a nossa página inicial da loja do nosso curso de criação de módulos Magento passou a carregar em 0.8 segundo ao invés de 1.3 segundo. Não precisamos dizer que este não é o ambiente ideal para realizar este tipo de teste, mas tenho certeza que você gostará dos resultados que vai ter.

Conte sua experiência aqui nos comentários, ou no grupo secreto de alunos do curso de backend de Magento 1 do Magenteiro.

Grande abraço e até a próxima.

 

Últimos posts por Ricardo Martins (exibir todos)
Comentários

Deixe seu comentário

[fbcomments url="https://www.magenteiro.com/blog/magento-1/como-habilitar-e-configurar-o-redis-no-magento/"]