Redis – expirando chaves automaticamente

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.

Facebooktwittergoogle_plusredditpinterestlinkedinmail

3 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 *