Redis – expirando chaves automaticamente

redis
Facebooktwittergoogle_plusredditpinterestlinkedinmail

Como falamos anteriormente, em nosso primeiro post sobre Redis, uma das aplicações para o Redis, é usá-lo para gerenciar sessões de usuário de uma aplicação/website. E uma característica comum de sessões, é que elas expiram após um determinado período, e é justamente isso que vamos ver hoje, como expirar uma chave do Redis de forma automática.

Vamos definir que nossa sessão, deva durar 10 minutos, independente da ação que o usuário tiver fazendo na aplicação/site. Para começar, vamos criar uma chave no Redis, usando o CLI (que vimos em nosso post Redis – primeiros passos):

redis 127.0.0.1:6379> SET usuario:1 "Desenvolvedor Ninja"

Agora, vamos executar o seguinte comando:

redis 127.0.0.1:6379> TTL usuario:1

O comando TTL indica qual o tempo de expiração de uma chave no Redis, para utilizá-lo, passamos como parâmetro a chave que queremos consultar. Em nosso exemplo, ao executarmos o comando acima, teremos como retorno a seguinte mensagem: (integer) -1.

Quando o retorno de uma consulta usando TTL for -1, significa que a chave não possui tempo de expiração. Se o retorno for -2, significa que a chave não existe no Redis. E no nosso caso, está -1 porque não definimos o tempo de expiração, apenas colocamos a chave e seu valor. Então, como definimos o tempo de expiração?

Nós usamos o comando EXPIRE, da seguinte forma:

redis 127.0.0.1:6379> EXPIRE usuario:1 600

O comando EXPIRE espera dois parâmetros, sendo o primeiro a chave que queremos definir, e o tempo em segundos, que queremos definir para expiração automática. Como retorno, poderemos ter 1 ou 0. O Redis retornará 1 em caso de sucesso, ou seja, foi definido um tempo de expiração para a chave informada, e retornará 0, quando a chave não existir, ou não for possível atribuir o tempo que foi solicitado.

Após definirmos o tempo de 600 segundos, vamos rodar novamente o comando TTL, igual fizemos acima:

redis 127.0.0.1:6379> TTL usuario:1

E dessa vez, teremos como resultado um número positivo, no meu caso aqui, foi 593, ou seja, a chave irá expirar daqui 593 segundos, se rodarmos novamente o comando, veremos um novo resultado, como por exemplo 562. Quando se passar o tempo definido, o Redis irá excluir a chave de forma automática.

Agora, vamos imaginar o contrário, que uma chave que era temporária e iria expirar, passe a ser permanente, como fazemos para retirar o tempo de expiração que foi definido? Simples, basta usarmos o comando PERSIST:

redis 127.0.0.1:6379> PERSIST usuario:1

Se tudo der certo, receberemos como retorno o número 1, informando que o comando foi executado com sucesso. E agora, se executarmos novamente o TTL, veremos que o resultado passa a ser -1 novamente.

Os comandos TTL e EXPIRE, trabalham com informações em segundos, e o Redis disponibiliza dois comandos equivalentes, que trabalham com milissegundos, são eles: PTTL e PEXPIRE, e eles funcionam da mesma forma que seus equivalentes em segundos.

Como vimos, trabalhar com expiração de chaves no Redis é algo bastante simples e muito útil para diversos casos em que você precisa armazenar os dados de forma temporária, como por exemplo ao trabalhar com cache de dados, além é claro das sessões de usuário.

Quase 20 anos de experiência no mercado de TI.
Atuação em grandes empresas como Netshoes, Borland, JBS, Bradesco, Hospital das Clínicas, Rede, Prodam, HSPE, Instituto Ayrton Senna, e também em empresas internacionais como Delta Dental, T-Mobile, Pepsi e Mckesson.
Fundador da TecPrime Solutions, administrador da comunidade nopCommerce Brasil, e autor dos sites InvestFacil.net e Desenvolvedores.ninja

Facebooktwittergoogle_plusredditpinterestlinkedinmail

4 thoughts on “Redis – expirando chaves automaticamente

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *