Chave de hash Redis EXPIRE

Chave De Hash Redis Expire



Os hashes Redis são um tipo especial de tipo de dados que é muito mais semelhante ao objeto JSON, Java HashMap ou a um dicionário Python. Além disso, é uma coleção de pares campo-valor que podem ser usados ​​para modelar objetos de domínio. A estrutura de dados de hash Redis é extremamente eficiente em termos de memória, onde cada chave de hash pode armazenar até quatro bilhões de pares de valor de campo. Mais importante ainda, as operações de hash fundamentais como HSET, HGET, HMGET, etc. operam em complexidade de tempo constante.


As chaves de hash Redis têm tempo de vida infinito (TTL), o que significa que são persistentes e são excluídas explicitamente usando comandos como DEL. Neste artigo, focaremos na configuração do TTL para hashes Redis usando o comando EXPIRE.







Comando EXPIRE do Redis

O comando EXPIRE é usado para definir um tempo limite em uma determinada chave de um hash Redis, conjunto, lista, etc. A chave Redis é excluída do banco de dados se o tempo limite expirar. Mais importante ainda, o tempo limite é apagado até que o conteúdo da chave seja excluído ou substituído. Alterar os valores associados a uma chave não afeta o tempo de expiração.



A sintaxe do comando EXPIRE é a seguinte:



EXPIRE chave expire_time_seconds [ NX | GX | GT | LT ]


chave: A chave do Hash, List ou Set que você precisa para definir um tempo limite.





expirty_time_seconds: O valor do tempo limite em segundos.

Vários argumentos opcionais são aceitos pelo comando EXPIRE.



NX: O valor de tempo limite é definido apenas se a chave especificada ainda não tiver expirado.

XX: Quando a chave especificada tem um valor de tempo limite existente, a nova expiração é definida.

GT: Se o novo valor de tempo limite for maior que o existente, a nova expiração será definida.

LT: O novo valor de tempo limite é definido se o existente for maior que o novo.

Mais importante ainda, o comando EXPIRE opera em complexidade de tempo constante. O inteiro 1 é retornado se a execução do comando for bem-sucedida. Se a operação falhar devido a argumentos errados ou chaves inexistentes, 0 será retornado.

Usaremos o comando EXPIRE em hashes para definir um tempo de expiração, conforme mostrado na seção a seguir:

Expirar Redis Hash usando o comando EXPIRE

Vamos supor que uma informação de sessão por usuário seja armazenada em um hash Redis sessão:id:1000:usuário:10. Podemos usar o comando HMSET para criar um hash Redis com vários pares de valor de campo da seguinte maneira:

sessão hmset:id: 1000 :do utilizador: 10 nome de usuário 'jae' bolacha 'sim' senha '389Ysu2'


Vamos inspecionar o hash criado usando o comando HGETALL.

sessão hgetall:id: 1000 :do utilizador: 10



Além disso, a sessão expira após 10 segundos se o usuário estiver ocioso por mais de 60 segundos. A expiração da sessão é obtida definindo o tempo de expiração do hash que armazena as informações da sessão.

Podemos usar o comando EXPIRE da seguinte forma:

expirar sessão:id: 1000 :do utilizador: 10 10


Conforme mencionado, o valor de tempo limite é definido como 10 segundos.


Como esperado, o valor de retorno é 1, o que significa que o TTL foi definido com sucesso para o hash. Vamos verificar o tempo restante antes que a chave de hash seja removida da loja Redis. O comando TTL pode ser usado da seguinte forma:

ttl sessão:id: 1000 :do utilizador: 10



Conforme mostrado na saída, restam três segundos antes de remover o hash automaticamente. Após 10 segundos, a saída do comando TTL é a seguinte:


Como a resposta do inteiro -2 é indicada, o hash não existe.

Definir tempo limite com base na existência de um tempo de expiração

O comando EXPIRE aceita os argumentos NX e XX para definir um novo tempo limite com base na existência de expiração para um hash especificado. Vamos criar um novo hash com o noTimeOut chave .

hmset noTimeOut nome 'teste'


Vamos tentar definir uma nova expiração para o hash anterior. Além disso, passamos o argumento XX para o comando EXPIRE também.

expire noTimeOut quinze XX


Como especificamos o XX opção no comando, o tempo de expiração não será definido. A opção XX não permite definir um novo tempo de expiração se não houver tempo limite existente associado à chave de hash especificada.


Se usarmos o NX opção, o valor de tempo limite é definido como 15.

expire noTimeOut quinze NX



O comando EXPIRE retorna a resposta inteira 1, o que significa que o tempo limite está definido corretamente.

Definir tempo limite com base no valor de tempo limite existente

As opções GT e LT podem ser usadas para definir o tempo de expiração do hash com base na duração do tempo limite existente.

Vamos criar um novo hash chamado hashWithTimeout.

hmset hashWithTimeout field1 valor1


Em seguida, definimos um tempo de expiração de 200 segundos para o hash.

expirar hashWithTimeout 200


Vamos tentar definir um novo tempo limite de 100 segundos para o hash junto com a opção GT da seguinte forma:

expirar hashWithTimeout 100 GT


Como a opção GT foi especificada, o comando EXPIRE verificará se o novo valor de tempo limite é maior que o existente e definirá o novo tempo de expiração. Neste exemplo, o novo tempo limite não é maior que o tempo limite existente. Portanto, o comando não definirá o novo tempo de expiração e 0 será retornado.


Vamos usar a opção LT em vez de GT. Como o novo tempo de expiração é menor que o atual, o comando a seguir deve definir com êxito o novo tempo limite.

expirar hashWithTimeout 100 LT


Conclusão

Resumindo, o comando Redis EXPIRE é usado para definir um valor TTL para uma determinada chave. Por padrão, as chaves de hash do Redis não estão associadas a nenhum tempo limite que é chamado de não volátil. Conforme discutido, o comando EXPIRE é usado para definir um valor de tempo limite no hash Redis. Normalmente, o hash é excluído do armazenamento de dados do Redis após o período de tempo especificado como um valor de tempo limite. Conforme mostrado nos exemplos, o comando EXPIRE aceita alguns argumentos opcionais como XX, NX, GT e LT para definir a expiração do hash com base em uma condição.