Redis é key-value baseado em memória. Imagine o Memcache com mais ferramentas como cluster e múltiplos banco de dados.

O Magento pode utilizar o Redis para:

  • Sessões
  • Cache
  • Full Page Cache (Enterprise)

Qual o motivo de utilizar Redis?

  • É mais rápido e eficiente para o backend do Magento. Recomendado pela Magento e a maioria de developers Magento.
  • Pode ser compartilhado entre múltiplos servidores balanceados e substitui o uso do Memcache para o cache backend.
  • Redis também pode ser utilizado para o <slow_backend>, ao contrário do Memcache, então o cache está em memória. Leia aqui a explicação de porque isso é bom: http://www.fabrizio-branca.de/magento-zend-frameworks-twolevels-cache-backend-mess.html
  • O Redis possui persistência, enquanto se você reiniciar o serviço de memcache você precisar esperar novo cache.

E onde deve ser instalado o Redis?

Isto irá depender do tipo de servidor que você utiliza, segue exemplos:

  • Dedicado – Instale Redis no servidor de banco de dados.
  • Cluster Dedicado – Redis pode ser configurado como um serviço RHCS para HA.
  • Cloud – Instale Redis em um servidor com bastante memória livre, normalmente o banco de dados. Outra opção é utilizar Redis-a-a-S.
  • Servidor único – Ainda ideal utilizar se você tiver memória livre. Utilize UNIX socket para eliminar TCP overhead.

Instalação e configuração:

O primeiro passo é verificar a versão do seu Magento, caso seja CE 1.8+ ou EE 1.13.1+ você pode utilizar Redis, caso não utilize essas versões você precisará de algum módulo. Nosso exemplo é somente para versões CE 1.8+ e EE 1.13.1+.

O segundo passo é instalar e configurar o serviço Redis. No nosso exemplo iremos instalar no servidor de banco de dados com IP privado 192.168.1.2. Faça a instalação do Redis executando os seguintes comandos:

yum install epel-release
yum install redis
chkconfig redis on

Configure o arquivo /etc/redis.conf, preste muita atenção que está é uma parte muito importante.

Primeiro altere o bind para o IP privado de seu servidor, no nosso caso:

bind 192.168.1.2

Vamos alterar a configuração para utilizar UNIX socket, para isso descomente as seguintes linhas:

unixsocket /tmp/redis.sock

unixsocketperm 755

No nosso caso nós queremos somente cache de memória, então podemos desabilitar persistência de disco comentando:

#save 900 1
#save 300 10
#save 60 10000

Algo muito importante é que Redis foi feito para velocidade e não segurança. O ideal é utilizar sempre uma rede privada ou o Cloud Networks. Se você utilizar uma rede privada que pode ser vista por outros usuários, vamos setar uma senha para o Redis. É recomendado criar uma senha grande porquê a velocidade do Redis facilita um brute force. Iremos utilizar esta senha:

FlfTlU6bAJQBVTtPFqJxX4xWamcjnFn28VBQhN3THN1fitMGlm

Ainda no mesmo arquivo adicione a senha:

requirepass FlfTlU6bAJQBVTtPFqJxX4xWamcjnFn28VBQhN3THN1fitMGlm

Ainda editando o mesmo arquivo iremos alterar algumas informações do maxmemory:

maxmemory 1500mb

maxmemory-policy allkeys-lru

Salve o arquivo e inicie o serviço Redis executando o comando:

service iptables save

Por último abra a porta 6379 com o comando:

iptables -A INPUT -p tcp -m state –state NEW -m tcp –dport 6379 -j ACCEPT
service iptables save

Agora que temos o serviço Redis rodando no nosso banco de dados, iremos instalar o módulo PHP em seu servidor WEB no terceiro passo. Você pode isntalar facilmente executando o comando:

yum install php-pecl-redis.x86_64 -y

Após instalar reinicie o Apache/nginx.

O quarto e último passo é a configuração do Magento. Abra o arquivo app/etc/local.xml e coloque as seguintes informações entre a tag <gloal>:

  • Sessões (https://github.com/colinmollenhour/Cm_RedisSession/blob/master/README.md):
           <session_save>db</session_save>
           <redis_session>
               <host>192.168.1.2</host>
               <port>6379</port>
               <password></password>
               <timeout>2.5</timeout>
               <persistent></persistent>
               <db>0</db>
               <compression_threshold>2048</compression_threshold>
               <compression_lib>gzip</compression_lib>
               <log_level>1</log_level>
               <max_concurrency>6</max_concurrency>
               <break_after_frontend>5</break_after_frontend>
               <fail_after>10</fail_after>
               <break_after_adminhtml>30</break_after_adminhtml>
               <first_lifetime>600</first_lifetime>
               <bot_first_lifetime>60</bot_first_lifetime>
               <bot_lifetime>7200</bot_lifetime>
               <disable_locking>0</disable_locking>
               <min_lifetime>60</min_lifetime>
               <max_lifetime>2592000</max_lifetime>
               <log_exceptions>0</log_exceptions>
           </redis_session>
  • Cache (https://github.com/colinmollenhour/Cm_Cache_Backend_Redis/blob/master/README.md):
    <cache>
     <backend>Cm_Cache_Backend_Redis</backend>
     <backend_options>
       <server>192.168.1.2</server>
       <port>6379</port>
       <persistent></persistent>
       <database>1</database>
       <password></password>
       <force_standalone>0</force_standalone>
       <connect_retries>1</connect_retries>
       <read_timeout>10</read_timeout>
       <automatic_cleaning_factor>0</automatic_cleaning_factor>
       <compress_data>1</compress_data>
       <compress_tags>1</compress_tags>
       <compress_threshold>20480</compress_threshold>
       <compression_lib>gzip</compression_lib>
       <use_lua>0</use_lua>
       <load_from_slave>tcp://redis-slave:6379</load_from_slave>
     </backend_options>
    </cache>
  • Full Page Cache (Enterprise somente) (https://github.com/colinmollenhour/Cm_Cache_Backend_Redis/blob/master/README.md):
    <full_page_cache>
     <backend>Cm_Cache_Backend_Redis</backend>
     <backend_options>
       <server>192.168.1.2</server>
       <port>6379</port>
       <persistent></persistent>
       <database>3</database>
       <password></password>
       <force_standalone>0</force_standalone>
       <connect_retries>1</connect_retries>
       <lifetimelimit>57600</lifetimelimit>
       <compress_data>0</compress_data>
       <auto_expire_lifetime></auto_expire_lifetime>
       <auto_expire_refresh_on_load></auto_expire_refresh_on_load>
     </backend_options>
    </full_page_cache>

Agora que configuramos o local.xml, iremos ativar o módulo do Redis para o Magento, para isso abra o arquivo app/etc/modules/Cm_RedisSession.xml e altere false para true.