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.