Redis GETEX

Redis Getex

O Redis é um armazenamento de dados de valor-chave usado como cache na memória, banco de dados, série temporal, mecanismo de fluxo, agente de mensagens etc. eficiente. Além disso, a velocidade de consulta é muito alta com baixa complexidade de tempo como O(1) e O(log(N)). As chaves do Redis podem conter diferentes estruturas de dados, como strings, conjuntos, hashes, conjuntos classificados e listas.

Normalmente, os comandos GET e SET são usados ​​para armazenar e recuperar valores do tipo string armazenados em uma determinada chave Redis. Esses dois comandos operam com complexidade de tempo constante.



Além disso, o comando GETEX está disponível para ler valores de string armazenados em uma determinada chave. Mas esse comando também está associado a uma operação de gravação paralela. Este guia se concentrará na sintaxe do comando GETEX, suas opções e casos de uso.



TTL de uma chave Redis

O valor de tempo de vida (TTL) é o tempo de expiração de um dado dado. Normalmente, um TTL pode ser associado a linhas do banco de dados. Um tempo limite também pode ser definido com as teclas Redis. Assim, um cliente Redis pode verificar os segundos restantes que uma determinada chave estará disponível no armazenamento de dados. O Redis oferece um comando TTL para verificar o valor do tempo de vida de uma determinada chave. Se nenhum tempo limite estiver associado a uma chave especificada, o comando TTL retornará -1. Usaremos o comando TTL nas próximas seções para verificar o tempo restante de uma determinada chave.



O comando GETEX

Conforme destacado, o comando GETEX é mais semelhante ao comando GET, exceto que pode ser usado para definir um tempo de expiração para a chave especificada. Além disso, uma opção de comando pode remover um valor de tempo limite de uma determinada chave. A sintaxe do comando GETEX é a seguinte:

Chave GETEX [ EX timeout_in_seconds | PX timeout_in_milliseconds | EXAT timeout_in_unix-time-seconds | PXAT timeout_in_unix-time-milliseconds | PERSISTIR ]

chave: Esta é a chave que aponta para um valor de string.

Os argumentos opcionais a seguir podem ser usados ​​para definir um tempo limite em segundos ou milissegundos.



EX: Isso definirá o tempo de expiração em segundos para uma determinada chave.

PX: O valor de tempo limite da chave será definido em milissegundos.

Além disso, podemos especificar um valor de timestamp UNIX em segundos ou milissegundos usando as seguintes opções de comando EXAT e PXAT :

EXATA: O tempo de expiração será definido no formato de carimbo de data/hora do UNIX e o carimbo de data/hora será em segundos.

PXAT: O tempo limite para uma determinada chave Redis será definido como um timestamp UNIX em milissegundos.

PERSISTIR: Ao especificar isso, você pode remover o valor de tempo de vida associado a uma chave especificada.

O comando GETEX retorna o valor da chave especificada. Este comando funciona apenas com valores do tipo string, mas não com hashes, listas, conjuntos ordenados, etc. Se você especificar uma chave associada a um valor não string, o comando retornará um erro. Além disso, se a chave já tiver expirado ou não existir, o comando retornará nada.

Na seção a seguir, abordaremos o uso prático do comando GETEX.

Caso de uso — Link de redefinição temporária ou geração de código PIN para recuperação de senha/OTPs

Uma empresa de hospedagem na web está fornecendo um recurso de recuperação de senha para usuários registrados. Como medida de segurança, eles enviam um novo link de URL para o usuário, que expira em 5 minutos. A empresa usa o armazenamento de dados Redis há muito tempo e usa o comando GETEX para definir um valor de tempo de vida para um determinado usuário.

Vamos supor que um usuário com user_id 1000 solicite uma recuperação de senha. Assim, o URL de recuperação pode ser armazenado na chave RecoveryURL:UserID:1000 . Podemos usar o comando SET para armazenar a URL de recuperação da seguinte forma:

definir RecoveryURL:UserID: 1000 'https://abc.com/recovery/userid=1000,key=sdfiuoe3290e9rjs'

Vamos verificar se o URL da string está armazenado corretamente na chave RecoveryURL:UserID:1000. Podemos usar o comando GETEX da seguinte forma:

getex RecoveryURL:UserID: 1000

A saída do comando anterior é mostrada a seguir:

Se tivermos usado o comando GET em vez do comando GETEX, a saída será a mesma.

Vamos usar o comando TTL para verificar se um tempo de expiração está associado a esta chave.

Ttl RecoveryURL:UserID: 1000

Conforme esperado, o -1 foi retornado pelo comando TTL, o que significa que nenhum tempo de expiração está associado à chave especificada.

De acordo com este exemplo, a empresa de hospedagem precisa definir um tempo limite de 5 minutos para a URL de recuperação. Então, vamos usar o EX opção de comando. Como 5 minutos são 300 segundos, podemos construir o comando GETEX da seguinte forma:

getex RecoveryURL:UserID: 1000 EX 500

Vamos executar o comando TTL algumas vezes para inspecionar o tempo restante que a chave existirá no armazenamento de dados.

Como esperado, o tempo está diminuindo e, eventualmente, o RecoveryURL:UserID:1000 chave será removida. O seguinte é a saída após 5 minutos:

O -2 foi retornado pelo comando, o que significa que a chave expirou e foi excluída do armazenamento de dados.

Às vezes, pode ser necessário remover o valor de tempo limite associado a uma determinada chave. Portanto, a opção de comando PERSIST pode ser usada para excluir um valor TTL relacionado a uma chave especificada.

Vamos criar outra chave de amostra e atribuir um valor de string a ela. Nesse caso, especificaremos o valor TTL em milissegundos passando o PX opção.

definir KeytoTestPersist 'Isso será expirado em 60 segundos' PX 50.000

Em seguida, verificaremos o tempo restante da seguinte forma:

Como esperado, o TTL está diminuindo. Vamos chamar o comando GETEX com a opção PERSIST da seguinte forma:

getex KeytoTestPersist persistir

Idealmente, isso removeria o TTL associado a essa chave. Vamos inspecionar o TTL para a chave KeytoTestPersist.

O comando TTL retornou o -1, o que significa que nenhum TTL está associado à chave KeytoTestPersist.

Da mesma forma, o GETEX O comando pode ser usado para definir o tempo de expiração das chaves no carimbo de data/hora do UNIX.

Conclusão

Em resumo, o comando Redis GETEX pode ser usado para recuperar os valores de string armazenados em uma determinada chave como o comando GET faz. A única diferença com o comando GETEX é que ele suporta a configuração e remoção de tempos de expiração para uma determinada chave. Ele suporta vários argumentos opcionais para especificar o tempo de expiração em segundos, milissegundos e segundos ou milissegundos do carimbo de data/hora do UNIX. Conforme discutido, o comando fornece a opção PERSIST para remover o TTL associado a uma determinada chave. No geral, o comando GETEX opera com complexidade de tempo constante.