Usando Redis como session handler no PHP.
Em sistemas
que façam uso excessivo de sessões, pode ocasionar lentidão, pois sendo
necessário muitas leituras e escritas aos arquivos de sessões, tendo
isso em mente podemos fazer uso de soluções de cache, como Memcache ou
mesmo o Banco de dados NoSQL Redis, aqui faremos uso do Redis por ser
mais rápido e não necessitar de tantas bibliotecas e configurações como é
o caso do Memcache.
Instalando o Redis
Baixe a versão mais atual do Redis no Site: http://redis.io/
Para nossa instrução estaremos usando a versão mais recente disponível no site até este momento.
curl http://redis.googlecode.com/files/redis-2.6.14.tar.gz | tar xzvf - cd redis-2.6.14/ make
O
Redis é desenvolvido para ser executado em plataforma de 64bits, caso
necessite executa-los em ambiente 32bits execute o make passando o
parâmetro 32bits
make 32bit
Após
a compilação é recomendado que faça o test, por se tratar de um banco
de dados que trabalha principalmente com a memória ele fará testes com
todas suas funções afim de detectar algum erro.
Talvez seja necessário proceder a instalação do pacote tcl, usado para os testes do redis.
apt-get install tcl
Execute os testes.
make test
Se tudo correu bem ao termino dos testes você terá uma mensagem como esta.
\o/ All tests passed without errors!
Proceda a instalação:
make install mkdir /etc/redis cp redis.conf /etc/redis
Neste
ponto a instalação já esta funcional, necessitando agora apenas a
criação de alguns diretórios de suporte, que serão usados para manter um
log do Redis e um dump dos dados da memória.
Instalação do script de startup (init.d)
Passaremos aos passos finais de instalação do Redis, com a inclusão do script de inicialização. Salve o arquivo no diretório /etc/init.d/ com o nome redis-server.
Torne o inicializável.
chmod 755 /etc/init.d/redis-server update-rc.d /etc/init.d/redis-server defaults
Finalizando crie o diretório abaixo e de as devidas permissões.
useradd redis groupadd redis mkdir /var/redis chown redis:redis /var/redis chmod 755 /var/redis
Edite o arquivo /etc/redis/redis.conf, localize a linha daemonize troque seu valor para yes
daemonize no para daemonize yes
Localize a seguinte linha dir ./
dir ./ para dir /var/redis
Por
padrão o sistema operacional Linux não permite que uma aplicação tome
muita memoria, da mesma forma que fazemos com o Oracle devemos fazer com
o Redis, permitindo assim que ele use quanta memoria necessitar para
satisfazer a aplicação, mais otimizações sobre quando de memória ele
pode tomar pode ser visto diretamente no site, ou em seu arquivo de
configuração que vem completamente comentado.
Adicione
a seguinte linha ao final do arquivo de configuração /etc/sysctl.conf e
reinicie o computador após a edição, ou execute a linha abaixo para
usar imediatamente.
sysctl vm.overcommit_memory=1
vm.overcommit_memory = 1
Pronto o Redis está instalado e pode ser executado. /etc/init.d/redis-server start
### BEGIN INIT INFO # Provides: redis-server # Required-Start: $syslog # Required-Stop: $syslog # Should-Start: $local_fs # Should-Stop: $local_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: redis-server - Persistent key-value db # Description: redis-server - Persistent key-value db ### END INIT INFO PATH=/opt/redis/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/usr/local/bin/redis-server CONFIG_FILE=/etc/redis/redis.conf DAEMON_ARGS="$CONFIG_FILE" NAME=redis-server DESC=redis-server PIDFILE=/var/run/redis.pid LOGFILE=/var/log/redis.log test -x $DAEMON || exit 0 test -x $DAEMONBOOTSTRAP || exit 0 set -e case "$1" in start) echo -n "Starting $DESC: " touch $PIDFILE $LOGFILE chown redis:redis $PIDFILE $LOGFILE if start-stop-daemon --start --quiet --umask 007 --pidfile $PIDFILE --chuid redis:redis --exec $DAEMON -- $DAEMON_ARGS then echo "$NAME." else echo "failed" fi ;; stop) echo -n "Stopping $DESC: " if [ ! -e "$PIDFILE" ] then echo "failed" else LISTENING_PORT=`grep -E "port +([0-9]+)" "$CONFIG_FILE" | grep -Eo "\d*[0-9]+$"` if echo "SHUTDOWN\r\n" | nc localhost "$LISTENING_PORT" then echo "$NAME." else echo "failed" fi rm -f $PIDFILE fi ;; restart|force-reload) ${0} stop ${0} start ;; *) echo "Usage: /etc/init.d/$NAME {start|stop|restart|force-reload}" >&2 exit 1 ;; esac exit 0
Instalando o predis extensão para o PHP
Vamos fazer uso do modulo predis que é o módulo do php que possui o melhor suporte ao Redis, o download pode ser feito a partir da Url do projeto em: Predis
Ou execute o clone do projeto.
git clone https://github.com/nicolasff/phpredis.git
Vamos passar agora para a compilação do módulo.
cd phpredis phpize ./configure make make install echo "extension=redis.so" >> /etc/php5/fpm/conf.d/redis.ini
Após
estes passos reinicie o php, caso esteja utilizando fpm ou reinicie o
servidor web caso esteja utilizando o php como um módulo.
/etc/init.d/php5-fpm reload
Agora vamos a etapa final, fazer com o que o php reconheça o redis.
Localize a linha session.save_handler e a substitua por:
session.save_handler = redis
Localize a linha session.save_path e a substitua por:
session.save_path = "tcp://localhost:6379/"
Feito isso apenas reinicie o php, e diga adeus a msession do PHP.
Lembrando que o redis ainda podemos balancear as sessões em diversos servidores redis.
Nenhum comentário:
Postar um comentário