Todos os produtos
Search
Central de documentação

Tair (Redis® OSS-Compatible):exHash

Última atualização: Jun 26, 2026

O TairHash (exHash) é uma estrutura de dados hash que permite definir tempo de expiração e versão para cada campo. Esse recurso aumenta a flexibilidade da estrutura de dados hash e simplifica o desenvolvimento em diversos cenários.

Visão geral

O TairHash estende o hash padrão do Redis com duas funcionalidades ausentes na implementação nativa: expiração por campo e controle de versão por campo. Você pode definir um TTL em campos individuais sem afetar o restante da chave e usar números de versão para evitar conflitos em escritas simultâneas.

O TairHash utiliza um algoritmo de Expiração Ativa que verifica e remove proativamente os campos expirados, sem impacto perceptível no tempo de resposta. Também há suporte à expiração passiva, que elimina os campos expirados no momento do acesso.

Principais recursos

  • Defina tempo de expiração e versão para cada campo.

  • Use políticas de expiração ativa e passiva para campos.

  • Utilize sintaxe semelhante ao tipo de dados hash nativo do Redis.

Este módulo é open source. Para mais informações, consulte TairHash.

Pré-requisitos

Antes de começar, verifique se você possui:

Mantenha sua instância na versão secundária mais recente para obter recursos adicionais e maior estabilidade. Consulte Atualização de versão secundária . Para instâncias com arquitetura de cluster ou de divisão de leitura/escrita, atualize também os nós de proxy. Caso contrário, alguns comandos podem não ser reconhecidos.

Precauções

Os comandos operam sobre dados TairHash em uma instância Tair.

Comandos

As tabelas a seguir listam todos os comandos do TairHash, agrupados por tipo de operação.

Comandos de escrita

Comando

Sintaxe

Descrição

EXHSET

`EXHSET key field value [EX time] [EXAT time] [PX time] [PXAT time] [NX

XX] [VER

ABS version] [KEEPTTL]`

Adiciona um campo à chave TairHash especificada. Cria a chave se ela não existir. Sobrescreve o valor do campo se ele já existir.

EXHMSET

EXHMSET key field value [field value ...]

Adiciona vários campos à chave TairHash especificada. Cria a chave se ela não existir. Sobrescreve os valores dos campos existentes.

EXHINCRBY

`EXHINCRBY key field num [EX time] [EXAT time] [PX time] [PXAT time] [VER

ABS version] [MIN minval] [MAX maxval] [KEEPTTL]`

Incrementa o valor inteiro de um campo em num. Cria a chave ou o campo se não existirem (o campo começa em 0 antes do incremento).

EXHINCRBYFLOAT

`EXHINCRBYFLOAT key field num [EX time] [EXAT time] [PX time] [PXAT time] [VER

ABS version] [MIN minval] [MAX maxval] [KEEPTTL]`

Incrementa o valor de ponto flutuante de um campo em num. Cria a chave ou o campo se não existirem (o campo começa em 0 antes do incremento).

Comandos de expiração

Comando

Sintaxe

Descrição

EXHEXPIRE

`EXHEXPIRE key field seconds [VER

ABS version]`

Define um tempo de expiração relativo em segundos para um campo.

EXHPEXPIRE

`EXHPEXPIRE key field milliseconds [VER

ABS version]`

Define um tempo de expiração relativo em milissegundos para um campo.

EXHEXPIREAT

`EXHEXPIREAT key field timestamp [VER

ABS version]`

Define um tempo de expiração absoluto (timestamp UNIX em segundos) para um campo.

EXHPEXPIREAT

`EXHPEXPIREAT key field milliseconds-timestamp [VER

ABS version]`

Define um tempo de expiração absoluto (timestamp UNIX em milissegundos) para um campo.

Comandos de leitura

Comando

Sintaxe

Descrição

EXHGET

EXHGET key field

Obtém o valor de um campo. Retorna nil se a chave ou o campo não existir.

EXHMGET

EXHMGET key field [field ...]

Obtém os valores de vários campos. Retorna nil para campos inexistentes.

EXHGETWITHVER

EXHGETWITHVER key field

Obtém o valor e o número de versão de um campo. Retorna nil se a chave ou o campo não existir.

EXHMGETWITHVER

EXHMGETWITHVER key field [field ...]

Obtém os valores e os números de versão de vários campos.

EXHTTL

EXHTTL key field

Obtém o TTL restante de um campo, em segundos.

EXHPTTL

EXHPTTL key field

Obtém o TTL restante de um campo, em milissegundos.

EXHVER

EXHVER key field

Obtém o número de versão atual de um campo.

EXHLEN

EXHLEN key [NOEXP]

Obtém o número de campos na chave. Especifique NOEXP para contar apenas campos não expirados.

EXHEXISTS

EXHEXISTS key field

Verifica se um campo existe.

EXHSTRLEN

EXHSTRLEN key field

Obtém o comprimento da string de valor de um campo.

EXHKEYS

EXHKEYS key

Obtém todos os campos da chave.

EXHVALS

EXHVALS key

Obtém todos os valores dos campos da chave.

EXHGETALL

EXHGETALL key

Obtém todos os campos e valores da chave.

EXHSCAN

EXHSCAN key op subkey [MATCH pattern] [COUNT count]

Percorre a chave iterativamente. Apenas para instâncias otimizadas para memória.

Comandos de versão

Comando

Sintaxe

Descrição

EXHSETVER

EXHSETVER key field version

Defina o número de versão de um campo.

Comandos de exclusão

Comando

Sintaxe

Descrição

EXHDEL

EXHDEL key field [field ...]

Exclua um ou mais campos da chave.

DEL

DEL key [key ...]

Exclua uma ou mais chaves TairHash usando o comando DEL nativo do Redis.

Convenções de sintaxe

Convenção

Significado

UPPERCASE KEYWORD

Palavra-chave do comando

_italic_

Variável

[option]

Parâmetro opcional

`A

B`

Mutuamente exclusivo — especifique apenas um

...

O parâmetro pode ser repetido

EXHSET

time complexity

**Sintaxe**

**`EXHSET key field value [EX time] [EXAT time] [PX time] [PXAT time] [NX

XX] [VER

ABS version] [KEEPTTL]`**

O(1)

Descrição

Adiciona um campo à chave TairHash especificada. Cria a chave se ela não existir. Sobrescreve o valor do campo se ele já existir.

Opções

Opção

Descrição

key

A chave TairHash.

field

O campo a ser definido.

value

O valor do campo.

EX time

Tempo de expiração relativo em segundos. 0 significa que o campo expira imediatamente. Omita para não definir expiração.

EXAT time

Tempo de expiração absoluto como um timestamp UNIX em segundos. 0 significa que o campo expira imediatamente.

PX time

Tempo de expiração relativo em milissegundos. 0 significa que o campo expira imediatamente.

PXAT time

Tempo de expiração absoluto como um timestamp UNIX em milissegundos. 0 significa que o campo expira imediatamente.

NX

Defina o campo apenas se ele ainda não existir.

XX

Defina o campo apenas se ele já existir.

VER version

Controle de concorrência otimista. Se o campo existir e sua versão atual corresponder a version, a operação prossegue e a versão é incrementada em 1. Se as versões diferirem, o sistema retorna um erro. Se o campo não existir ou sua versão for 0, a verificação é ignorada e a versão torna-se 1 após a operação.

ABS version

Defina a versão com um valor exato, independentemente da versão atual.

KEEPTTL

Preserva a expiração atual do campo quando você não especifica EX, EXAT, PX ou PXAT. Sem KEEPTTL, o EXHSET limpa a expiração existente.

Após definir um tempo limite para um campo, executar o EXHSET novamente sem uma opção de tempo limite limpa a expiração (a menos que você use KEEPTTL ). Para definir uma expiração na própria chave, use o comando nativo EXPIRE ou EXPIREAT .

Valores de retorno

Valor

Significado

1

Um novo campo foi criado.

0

O campo existia e seu valor foi sobrescrito.

-1

XX foi especificado, mas o campo não existe, ou NX foi especificado, mas o campo já existe.

"ERR update version is stale"

VER foi especificado e a versão não corresponde à versão atual.

Exemplo

EXHSET myhash field1 val EX 10
(integer) 1

EXHGET

**Sintaxe**

**EXHGET key field**

Complexidade de tempo

O(1)

Descrição

Obtém o valor de um campo. Retorna nil se a chave ou o campo não existir.

Valores de retorno

Valor

Significado

Valor do campo

O campo existe.

nil

A chave ou o campo não existe.

Exemplo

EXHSET myhash field1 val
EXHGET myhash field1
"val"

EXHMSET

**Sintaxe**

**EXHMSET key field value [field value ...]**

Complexidade de tempo

O(N), onde N é o número de campos

Descrição

Adiciona vários campos à chave TairHash especificada. Cria a chave se ela não existir. Sobrescreve os valores dos campos existentes.

Para definir a expiração em campos individuais após a criação, use EXHEXPIRE, EXHPEXPIRE, EXHEXPIREAT ou EXHPEXPIREAT. Para definir a expiração na própria chave, use o comando nativo EXPIRE ou EXPIREAT .

Valores de retorno

Valor

Significado

OK

A operação foi bem-sucedida.

Exemplo

EXHMSET myhash field1 val1 field2 val2
OK

EXHEXPIRE

**Sintaxe**

**`EXHEXPIRE key field seconds [VER

ABS version]`**

Complexidade de tempo

O(1)

Descrição

Define um tempo de expiração relativo em segundos para um campo.

Opções

Opção

Descrição

key

A chave TairHash.

field

O campo no qual definir a expiração.

seconds

Tempo de expiração relativo em segundos.

VER version

Mesmo comportamento de concorrência otimista do EXHSET.

ABS version

Defina a versão com um valor exato, independentemente da versão atual.

Valores de retorno

Valor

Significado

1

O campo existe e a expiração foi definida.

0

O campo não existe.

Exemplo

EXHSET myhash field1 val
EXHEXPIRE myhash field1 100
(integer) 1

EXHPEXPIRE

**Sintaxe**

**`EXHPEXPIRE key field milliseconds [VER

ABS version]`**

Complexidade de tempo

O(1)

Descrição

Define um tempo de expiração relativo em milissegundos para um campo.

Opções

Opção

Descrição

key

A chave TairHash.

field

O campo no qual definir a expiração.

milliseconds

Tempo de expiração relativo em milissegundos.

VER version

Mesmo comportamento de concorrência otimista do EXHSET.

ABS version

Defina a versão com um valor exato, independentemente da versão atual.

Valores de retorno

Valor

Significado

1

O campo existe e a expiração foi definida.

0

O campo não existe.

Exemplo

EXHSET myhash field1 val
EXHPEXPIRE myhash field1 1000
(integer) 1

EXHEXPIREAT

**Sintaxe**

**`EXHEXPIREAT key field timestamp [VER

ABS version]`**

Complexidade de tempo

O(1)

Descrição

Define um tempo de expiração absoluto (timestamp UNIX em segundos) para um campo.

Opções

Opção

Descrição

key

A chave TairHash.

field

O campo no qual definir a expiração.

timestamp

Timestamp UNIX absoluto em segundos.

VER version

Mesmo comportamento de concorrência otimista do EXHSET.

ABS version

Defina a versão com um valor exato, independentemente da versão atual.

Valores de retorno

Valor

Significado

1

O campo existe e a expiração foi definida.

0

O campo não existe.

Exemplo

EXHEXPIREAT myhash field1 1293840000
(integer) 1

EXHPEXPIREAT

**Sintaxe**

**`EXHPEXPIREAT key field milliseconds-timestamp [VER

ABS version]`**

Complexidade de tempo

O(1)

Descrição

Define um tempo de expiração absoluto (timestamp UNIX em milissegundos) para um campo.

Opções

Opção

Descrição

key

A chave TairHash.

field

O campo no qual definir a expiração.

milliseconds-timestamp

Timestamp UNIX absoluto em milissegundos.

VER version

Mesmo comportamento de concorrência otimista do EXHSET.

ABS version

Defina a versão com um valor exato, independentemente da versão atual.

Valores de retorno

Valor

Significado

1

O campo existe e a expiração foi definida.

0

O campo não existe.

Exemplo

EXHPEXPIREAT myhash field1 1293840000000
(integer) 1

EXHTTL

**Sintaxe**

**EXHTTL key field**

Complexidade de tempo

O(1)

Descrição

Obtém o TTL restante de um campo, em segundos.

Valores de retorno

Valor

Significado

Inteiro positivo

TTL restante em segundos.

-1

O campo existe, mas não tem expiração definida.

-2

A chave não existe.

-3

O campo não existe.

Exemplo

O exemplo a seguir mostra todos os estados de retorno possíveis em uma única sequência: um campo com TTL definido (85) e um campo sem expiração (-1).

EXHSET myhash field1 val1 EX 100
EXHSET myhash field2 val2
EXHTTL myhash field1
EXHTTL myhash field2
EXHTTL myhash field3
(integer) 85
(integer) -1
(integer) -3

EXHPTTL

**Sintaxe**

**EXHPTTL key field**

Complexidade de tempo

O(1)

Descrição

Obtém o TTL restante de um campo, em milissegundos.

Valores de retorno

Valor

Significado

Inteiro positivo

TTL restante em milissegundos.

-1

O campo existe, mas não tem expiração definida.

-2

A chave não existe.

-3

O campo não existe.

Exemplo

EXHSET myhash field1 val1 EX 100
EXHPTTL myhash field1
(integer) 97213

EXHVER

**Sintaxe**

**EXHVER key field**

Complexidade de tempo

O(1)

Descrição

Obtém o número de versão atual de um campo.

Valores de retorno

Valor

Significado

Inteiro positivo

O número de versão atual.

-1

A chave não existe.

-2

O campo não existe.

Exemplo

EXHVER myhash field1
(integer) 1

EXHSETVER

**Sintaxe**

**EXHSETVER key field version**

Complexidade de tempo

O(1)

Descrição

Defina o número de versão de um campo com um valor exato.

Valores de retorno

Valor

Significado

1

A versão foi definida.

0

A chave ou o campo não existe.

Exemplo

EXHSETVER myhash field1 3
(integer) 1

EXHINCRBY

**Sintaxe**

**`EXHINCRBY key field num [EX time] [EXAT time] [PX time] [PXAT time] [VER

ABS version] [MIN minval] [MAX maxval] [KEEPTTL]`**

Complexidade de tempo

O(1)

Descrição

Incrementa o valor inteiro de um campo em num. Cria a chave ou o campo se não existirem; um novo campo começa em 0 antes do incremento.

Opções

Opção

Descrição

key

A chave TairHash.

field

O campo a ser incrementado.

num

Valor inteiro de incremento.

EX, EXAT, PX, PXAT

Mesma função que no EXHSET.

VER version

Mesmo comportamento de concorrência otimista do EXHSET.

ABS version

Defina a versão com um valor exato, independentemente da versão atual.

MIN minval

Valor mínimo permitido. Retorna um erro se o resultado for menor que minval.

MAX maxval

Valor máximo permitido. Retorna um erro se o resultado exceder maxval.

KEEPTTL

Preserva a expiração atual do campo. Mesmo comportamento do EXHSET.

Após definir um tempo limite para um campo, executar o EXHINCRBY novamente sem uma opção de tempo limite limpa a expiração (a menos que você use KEEPTTL ).

Valores de retorno

Valor

Significado

Inteiro

O novo valor após o incremento.

Exemplo

EXHMSET myhash field1 10
EXHINCRBY myhash field1 100
(integer) 110

EXHINCRBYFLOAT

**Sintaxe**

**`EXHINCRBYFLOAT key field num [EX time] [EXAT time] [PX time] [PXAT time] [VER

ABS version] [MIN minval] [MAX maxval] [KEEPTTL]`**

Complexidade de tempo

O(1)

Descrição

Incrementa o valor de ponto flutuante de um campo em num. Cria a chave ou o campo se não existirem; um novo campo começa em 0 antes do incremento.

Opções

Opção

Descrição

key

A chave TairHash.

field

O campo a ser incrementado.

num

Valor de incremento de ponto flutuante.

EX, EXAT, PX, PXAT

Mesma função que no EXHSET.

VER version

Mesmo comportamento de concorrência otimista do EXHSET.

ABS version

Defina a versão com um valor exato, independentemente da versão atual.

MIN minval

Valor mínimo permitido. Retorna um erro se o resultado for menor que minval.

MAX maxval

Valor máximo permitido. Retorna um erro se o resultado exceder maxval.

KEEPTTL

Preserva a expiração atual do campo. Mesmo comportamento do EXHSET.

Após definir um tempo limite para um campo, executar o EXHINCRBYFLOAT novamente sem uma opção de tempo limite limpa a expiração (a menos que você use KEEPTTL ).

Valores de retorno

Valor

Significado

String de ponto flutuante

O novo valor após o incremento.

Exemplo

EXHMSET myhash field1 10
EXHINCRBYFLOAT myhash field1 9.235
"19.235"

EXHGETWITHVER

**Sintaxe**

**EXHGETWITHVER key field**

Complexidade de tempo

O(1)

Descrição

Obtém o valor e o número de versão de um campo. Retorna nil se a chave ou o campo não existir.

Valores de retorno

Valor

Significado

Array de [value, version]

O campo existe.

nil

A chave ou o campo não existe.

Exemplo

EXHGETWITHVER myhash field1
1) "19.235"
2) (integer) 5

EXHMGET

**Sintaxe**

**EXHMGET key field [field ...]**

Complexidade de tempo

O(1)

Descrição

Obtém os valores de vários campos. Retorna nil para campos inexistentes.

Valores de retorno

Valor

Significado

nil

A chave não existe.

Array de valores

Um elemento por campo solicitado; nil para campos inexistentes.

Exemplo

EXHMSET myhash field1 10 field2 var1
EXHMGET myhash field1 field2
1) "10"
2) "var1"

EXHMGETWITHVER

**Sintaxe**

**EXHMGETWITHVER key field [field ...]**

Complexidade de tempo

O(1)

Descrição

Obtém os valores e os números de versão de vários campos. Retorna nil para campos inexistentes.

Valores de retorno

Valor

Significado

nil

A chave não existe.

Array de pares [value, version]

Um elemento por campo solicitado; nil para campos inexistentes.

Exemplo

EXHMSET myhash field1 10 field2 var1
EXHMGETWITHVER myhash field1 field2
1) 1) "10"
   2) (integer) 1
2) 1) "var1"
   2) (integer) 1

EXHLEN

**Sintaxe**

**EXHLEN key [NOEXP]**

Complexidade de tempo

O(1) sem NOEXP; O(N) com NOEXP

Descrição

Obtém o número de campos na chave. Por padrão, inclui campos que expiraram, mas ainda não foram excluídos. Use NOEXP para contar apenas campos não expirados.

Opções

Opção

Descrição

NOEXP

Percorre toda a chave e filtra os campos expirados antes da contagem. Observe que NOEXP filtra campos da contagem, mas não os remove. O tempo de resposta escala conforme o tamanho da chave.

Valores de retorno

Valor

Significado

Inteiro

Número de campos (pode incluir campos expirados, mas não excluídos, sem NOEXP).

0

A chave não existe.

Exemplo

EXHLEN myhash
(integer) 2

EXHEXISTS

**Sintaxe**

**EXHEXISTS key field**

Complexidade de tempo

O(1)

Descrição

Verifica se um campo existe na chave.

Valores de retorno

Valor

Significado

1

O campo existe.

0

A chave ou o campo não existe.

Exemplo

EXHEXISTS myhash field1
(integer) 1

EXHSTRLEN

**Sintaxe**

**EXHSTRLEN key field**

Complexidade de tempo

O(1)

Descrição

Obtém o comprimento da string de valor de um campo.

Valores de retorno

Valor

Significado

Inteiro positivo

O comprimento da string.

0

A chave ou o campo não existe.

Exemplo

EXHSTRLEN myhash field1
(integer) 2

EXHKEYS

**Sintaxe**

**EXHKEYS key**

Complexidade de tempo

O(N)

Descrição

Obtém todos os campos da chave.

Valores de retorno

Valor

Significado

Array de nomes de campos

A chave existe.

Array vazio

A chave não existe.

Exemplo

EXHMSET myhash field1 10 field2 var1
EXHKEYS myhash
1) "field1"
2) "field2"

EXHVALS

**Sintaxe**

**EXHVALS key**

Complexidade de tempo

O(N)

Descrição

Obtém todos os valores dos campos da chave.

Valores de retorno

Valor

Significado

Array de valores

A chave existe.

Array vazio

A chave não existe.

Exemplo

EXHMSET myhash field1 10 field2 var1
EXHVALS myhash
1) "10"
2) "var1"

EXHGETALL

**Sintaxe**

**EXHGETALL key**

Complexidade de tempo

O(N)

Descrição

Obtém todos os campos e seus valores na chave. A resposta alterna entre nomes de campos e valores.

Valores de retorno

Valor

Significado

Array de pares campo-valor

A chave existe.

Array vazio

A chave não existe.

Exemplo

EXHMSET myhash field1 10 field2 var1
EXHGETALL myhash
1) "field1"
2) "10"
3) "field2"
4) "var1"

EXHSCAN

**Sintaxe**

**EXHSCAN key op subkey [MATCH pattern] [COUNT count]**

Complexidade de tempo

O(1) por chamada; O(N) para uma varredura completa

Descrição

Percorre a chave iterativamente e retorna um cursor e um lote de pares campo-valor. Apenas para instâncias otimizadas para memória.

Opções

Opção

Descrição

key

A chave TairHash.

op

Posição inicial da varredura. Veja os valores válidos abaixo.

subkey

Campo de referência usado com op. Ignorado quando op é ^ ou $.

MATCH pattern

Filtra os resultados por um padrão de expressão regular aplicado aos nomes dos campos.

COUNT count

Número de campos a serem percorridos por chamada. O padrão é 10. O número real de resultados pode variar dependendo do tamanho da chave e da aplicação de MATCH.

Valores válidos de op

Valor

Posição inicial

>

Primeiro campo maior que subkey

>=

Primeiro campo maior ou igual a subkey

<

Primeiro campo menor que subkey

<=

Primeiro campo menor ou igual a subkey

==

Primeiro campo igual a subkey

^

Primeiro campo da chave

$

Último campo da chave

Valores de retorno

A resposta é um array de dois elementos:

  1. O campo inicial para a próxima chamada de varredura. Vazio quando a varredura estiver concluída.

  2. Os campos percorridos e seus valores, intercalados como [field, value, field, value, ...].

Retorna um array vazio se a chave não existir.

Exemplo

EXHMSET myhashkey field1 val1 field2 val2 field3 val3 field4 val4 field5 val5
EXHSCAN myhashkey ^ xx COUNT 3
1) "field4"
2) 1) "field1"
   2) "val1"
   3) "field2"
   4) "val2"
   5) "field3"
   6) "val3"

A próxima varredura começa em field4. Passe field4 como subkey com op >= para continuar.

EXHDEL

**Sintaxe**

**EXHDEL key field [field ...]**

Complexidade de tempo

O(1)

Descrição

Exclua um ou mais campos da chave.

Valores de retorno

Valor

Significado

1

O campo foi excluído.

0

A chave ou o campo não existe.

Exemplo

EXHDEL myhash field1
(integer) 1

Perguntas frequentes

Por que o exHash usa mais memória que um hash padrão do Redis para os mesmos dados?

Cada campo no TairHash armazena metadados adicionais — o timestamp de expiração e o número de versão — que um hash padrão do Redis não possui. Esses metadados extras por campo causam o maior uso de memória.