Redis e PHP: Who is online?

Redis e PHP: Who is online?

Em um micro projeto precisei manter uma lista de usuários online, são usuários de várias fontes em conexões não persistentes, então fiz uma solução simples em PHP e Redis.

Primeiro você precisa conhecer o Redis e te-lo rodando, o que é bem simples:

$ git clone git://github.com/antirez/redis.git
$ cd redis
$ make
$ ./src/redis-server

Com o redis funcionando vamos usar a biblioteca Predis para trabalhar com Redis em PHP, pegue uma cópia atual e prepare o Phar do projeto:

$ git clone git://github.com/nrk/predis.git
$ cd predis
$ php bin/createPhar.php
$ mv predis-*.phar seu/projeto/predis.phar

Com as dependências prontas vamos a lógica para os usuários online: Vou implementar um método “ping” em um controller qualquer, a cada ação do usuário uma chamada ao “ping” vai ocorrer.

A cada ping o nome do usuário vai ser inserido em um “set” no redis, vou ter um “set” para cada minuto, mas usando “expire” só vou manter os sets dos ultimos 5 minutos.

Para descobrir os usuários online faço “sunion” dos ultimos 5 minutos para saber quem está online. Você pode ajustar o tempo como achar mais justo para sua aplicação.

Segue o “pseudo-controller”, devidamente comentado (no projeto é meio diferente, mas a base é essa):

PS: o Predis é para PHP 5.3, o que não deve ser um problema, certo?

Uma ideia sobre “Redis e PHP: Who is online?

  1. Ao tentar criar o predis.phar, gerou este erro no terminal:

    [code]tyler@tyler-vortex:~/redis/predis$ php bin/createPhar.php
    PHP Fatal error: Uncaught exception ‘UnexpectedValueException’ with message ‘creating archive “predis_0.7.0-dev.phar” disabled by the php.ini setting phar.readonly’ in /home/tyler/redis/predis/bin/createPhar.php:71
    Stack trace:
    #0 /home/tyler/redis/predis/bin/createPhar.php(71): Phar->__construct(‘predis_0.7.0-de…’)
    #1 {main}
    thrown in /home/tyler/redis/predis/bin/createPhar.php on line 71[/code]

Comentários encerrados.