Todos os produtos
Search
Central de documentação

Tair (Redis® OSS-Compatible):Documento

Última atualização: Oct 20, 2026

O TairDoc é uma estrutura de dados para documentos semelhante ao RedisJSON. Use o TairDoc para armazenar, consultar e manipular documentos JSON com suporte completo a operações CRUD.

Principais recursos:

  • Suporte completo ao padrão JSON

  • Suporte a JSONPath (RFC draft-4) por meio de JSON.GET; seletores específicos, como curinga de ponto, índice e filtro, exigem a versão 1.8.4 ou posterior

  • Suporte completo à sintaxe JSON Pointer (RFC 6901)

  • Armazenamento em árvore binária para recuperação eficiente de elementos filhos

  • Conversão de JSON para XML e de JSON para YAML por meio de JSON.GET

Notas de versão:

  1. Lançamos o TairDoc junto com as instâncias otimizadas para memória do Tair. Ele suporta a sintaxe JSON Pointer completa e a sintaxe JSONPath parcial (somente o JSON.GET é compatível com a sintaxe JSONPath).

  2. Em 17 de maio de 2022, lançamos o TairDoc V1.8.4 com suporte total a JSONPath para JSON.GET, incluindo os seletores de curinga de ponto, índice e filtro. Recomendamos atualizar a versão secundária da sua instância para 1.8.4 ou posterior.

Pré-requisitos

Antes de começar, certifique-se de ter:

  • Uma DRAM-based instance do Tair

  • Versão secundária da instância 1.8.4 ou posterior (necessária para suporte total a JSONPath por meio de JSON.GET)

Para atualizar sua instância para a versão secundária mais recente, consulte Update the minor version of an instance.

Para instâncias em cluster ou com divisão de leitura e escrita, atualize os nós de proxy para a versão secundária mais recente para garantir que todos os comandos funcionem conforme o esperado.

Lista de comandos

Comando

Descrição

Complexidade de tempo

JSON.SET

Cria uma chave TairDoc ou atualiza um elemento JSON em um caminho

O(N)

JSON.GET

Recupera um elemento JSON de um caminho

O(N)

JSON.DEL

Exclui um elemento JSON ou uma chave

O(N)

JSON.TYPE

Obtém o tipo de um elemento JSON

O(N)

JSON.MERGE

Mescla um valor JSON em um caminho

O(N)

JSON.NUMINCRBY

Incrementa um elemento JSON numérico

O(N)

JSON.STRAPPEND

Anexa uma string a um elemento de string JSON

O(N)

JSON.STRLEN

Obtém o comprimento de um elemento de string JSON

O(N)

JSON.ARRAPPEND

Anexa elementos ao final de um array

O(M×N)

JSON.ARRPOP

Remove e retorna um elemento de um array

O(M×N)

JSON.ARRINSERT

Insere elementos antes de um determinado índice em um array

O(M×N)

JSON.ARRLEN

Obtém o comprimento de um array

O(N)

JSON.ARRTRIM

Recorta um array para um intervalo especificado

O(N)

DEL

Exclui uma ou mais chaves TairDoc (comando nativo do Redis)

—

Convenções de sintaxe usadas nesta referência:

  • UPPERCASE: palavra-chave do comando

  • _italic_: variável

  • [option]: parâmetro opcional

  • A | B: opções mutuamente exclusivas

  • ...: parâmetro repetível

JSON.SET

Sintaxe: JSON.SET key path json [NX | XX]

Cria uma chave TairDoc e armazena um elemento JSON no caminho especificado. Se a chave e o caminho já existirem, atualiza o elemento.

Parâmetros:

Parâmetro

Descrição

key

A chave TairDoc

path

Caminho dentro da chave. Use . ou $ para a raiz

json

O elemento JSON a ser armazenado

NX

Grava apenas se o caminho não existir

XX

Grava apenas se o caminho já existir

Valores de retorno:

Resultado

Valor de retorno

Sucesso

OK

XX especificado, mas o caminho não existe

nil

NX especificado, mas o caminho já existe

nil

Caminho inválido

ERR could not find object to add, please check path

Exemplo — criar um documento JSON:

O comando a seguir cria uma chave doc no caminho raiz ($) e armazena um documento de uma livraria com quatro livros e uma bicicleta:

JSON.SET doc $ '{ "store": { "book": [ { "category": "reference", "author": "Nigel Rees", "title": "Sayings of the Century", "price": 8.95 }, { "category": "fiction", "author": "Evelyn Waugh", "title": "Sword of Honour", "price": 12.99 }, { "category": "fiction", "author": "Herman Melville", "title": "Moby Dick", "isbn": "0-553-21311-3", "price": 8.99 }, { "category": "fiction", "author": "J. R. R. Tolkien", "title": "The Lord of the Rings", "isbn": "0-395-19395-8", "price": 22.99 } ], "bicycle": { "color": "red", "price": 19.95 } } }'

Saída esperada:

OK

JSON.GET

Sintaxe: JSON.GET key path [FORMAT XML | YAML] [ROOTNAME root] [ARRNAME arr]

Recupera o elemento JSON no caminho especificado. Suporta as sintaxes JSONPath e JSON Pointer.

Parâmetros:

Parâmetro

Descrição

key

A chave TairDoc

path

Caminho dentro da chave. Aceita as sintaxes JSONPath (estilo $) e JSON Pointer (estilo .)

FORMAT

Formato de saída: XML ou YAML. Se omitido, retorna JSON

ROOTNAME

Nome da tag para o elemento raiz na saída XML. Válido apenas quando FORMAT XML está definido

ARRNAME

Nome da tag para elementos de array na saída XML. Válido apenas quando FORMAT XML está definido

Valores de retorno:

Resultado

Valor de retorno

Sucesso

O elemento JSON no caminho especificado

Erro

Mensagem de erro

Exemplo — recuperar um documento como XML:

Primeiro, crie o documento:

JSON.SET doc . '{"foo": "bar", "baz" : 42}'

Em seguida, recupere-o como XML, especificando ROOT como o nome da tag raiz e ARR como o nome da tag do array:

JSON.GET doc . FORMAT XML ROOTNAME ROOT ARRNAME ARR

Saída esperada:

"<?xml version=\"1.0\" encoding=\"UTF-8\"?><ROOT><foo>bar</foo><baz>42</baz></ROOT>"

JSON.DEL

Sintaxe: JSON.DEL key path

Exclui o elemento JSON no caminho especificado. Se nenhum caminho for fornecido, exclui a chave inteira. Não executa nenhuma ação e não retorna erro se a chave ou o caminho não existir.

Parâmetros:

Parâmetro

Descrição

key

A chave TairDoc

path

Caminho do elemento a ser excluído. Se omitido, exclui a chave inteira

Valores de retorno:

Resultado

Valor de retorno

Sucesso

1

Chave ou caminho não encontrado

0

Exemplo — excluir um campo:

Primeiro, crie o documento:

JSON.SET doc . '{"foo": "bar", "baz" : 42}'

Exclua o campo foo:

JSON.DEL doc .foo

Saída esperada — 1 indica que o elemento foi excluído:

(integer) 1

JSON.TYPE

Sintaxe: JSON.TYPE key path

Retorna o tipo do elemento JSON no caminho especificado.

Parâmetros:

Parâmetro

Descrição

key

A chave TairDoc

path

Caminho do elemento

Valores de retorno:

Resultado

Valor de retorno

Sucesso

Um dos seguintes: boolean, string, number, array, object, raw, reference, const, null

Falha

0

Chave ou caminho não encontrado

nil

Exemplo — obter o tipo de um campo:

Primeiro, crie o documento:

JSON.SET doc . '{"foo": "bar", "baz" : 42}'

Obtenha o tipo do campo foo ("bar" é uma string):

JSON.TYPE doc .foo

Saída esperada:

string

JSON.MERGE

Sintaxe: JSON.MERGE key path value

Mescla um valor JSON no caminho especificado. Suporta a adição de novos valores, a atualização de valores existentes e a exclusão de valores no caminho especificado.

Parâmetros:

Parâmetro

Descrição

key

A chave TairDoc

path

Caminho para mesclagem. Aceita sintaxe JSONPath parcial (por exemplo, $.a.b.c, $.a['b']). Não aceita expressões de descida recursiva ($..) ou curinga ($*)

value

O valor JSON a ser mesclado. Compatível com JSON Merge Patch (RFC 7386)

Valores de retorno:

Resultado

Valor de retorno

Sucesso

OK

Valor inválido

Erro (falha ao analisar o patch de mesclagem)

Exemplo — adicionar, atualizar e excluir valores em uma única operação:

Primeiro, crie o documento:

JSON.SET doc $ '{"f1": {"a":1}, "f2":{"a":2}}'

Mescle as alterações: defina f1 como null (isso o exclui), atualize f2.a, adicione f2.b e adicione um novo array f3:

JSON.MERGE doc $ '{"f1": null, "f2":{"a":3, "b":4}, "f3":[2,4,6]}'

Saída esperada:

OK

Verifique o resultado com JSON.GET doc .. O patch de mesclagem remove a chave f1 porque definir um campo como null o exclui:

"{\"f2\":{\"a\":3,\"b\":4},\"f3\":[2,4,6]}"

JSON.NUMINCRBY

Sintaxe: JSON.NUMINCRBY key path value

Incrementa o elemento JSON numérico no caminho especificado. Tanto o elemento existente quanto o valor de incremento devem ser do mesmo tipo: inteiro ou double.

Parâmetros:

Parâmetro

Descrição

key

A chave TairDoc

path

Caminho do elemento numérico

value

O valor a ser adicionado

Valores de retorno:

Resultado

Valor de retorno

Sucesso

O novo valor após o incremento

Chave ou caminho não encontrado

Erro

Exemplo — incrementar um campo numérico:

Primeiro, crie o documento:

JSON.SET doc . '{"foo": "bar", "baz" : 42}'

Incremente baz em 10 (42 + 10 = 52):

JSON.NUMINCRBY doc .baz 10

Saída esperada:

"52"

JSON.STRAPPEND

Sintaxe: JSON.STRAPPEND key path json-string

Anexa uma string ao elemento de string JSON no caminho especificado. Tanto o elemento existente quanto o valor anexado devem ser do tipo string.

Parâmetros:

Parâmetro

Descrição

key

A chave TairDoc

path

Caminho do elemento de string

json-string

A string a ser anexada

Valores de retorno:

Resultado

Valor de retorno

Sucesso

O novo comprimento da string

Chave não encontrada

-1

Exemplo — anexar a um campo de string:

Primeiro, crie o documento:

JSON.SET doc . '{"foo": "bar", "baz" : 42}'

Anexe rrrrr a foo — "bar" se torna "barrrrrr", que possui 8 caracteres:

JSON.STRAPPEND doc .foo rrrrr

Saída esperada:

(integer) 8

JSON.STRLEN

Sintaxe: JSON.STRLEN key path

Retorna o comprimento em caracteres do elemento de string JSON no caminho especificado. O elemento deve ser do tipo string.

Parâmetros:

Parâmetro

Descrição

key

A chave TairDoc

path

Caminho do elemento de string

Valores de retorno:

Resultado

Valor de retorno

Sucesso

Comprimento da string

Chave não encontrada

-1

Exemplo — obter o comprimento de um campo de string:

Primeiro, crie o documento:

JSON.SET doc . '{"foo": "bar", "baz" : 42}'

Obtenha o comprimento de foo — "bar" possui 3 caracteres:

JSON.STRLEN doc .foo

Saída esperada:

(integer) 3

JSON.ARRAPPEND

Sintaxe: JSON.ARRAPPEND key path json [json ...]

Anexa um ou mais elementos JSON ao final de um array. A complexidade de tempo é O(M×N), onde M é o número de elementos a serem anexados e N é o comprimento atual do array.

Parâmetros:

Parâmetro

Descrição

key

A chave TairDoc

path

Caminho do array

json

Um ou mais elementos JSON a serem anexados

Valores de retorno:

Resultado

Valor de retorno

Sucesso

O novo comprimento do array

Chave não encontrada

-1

Exemplo — anexar vários elementos a um array:

Primeiro, crie o documento:

JSON.SET doc . '{"id": [1,2,3]}'

Anexe null, false e true ao array id. O array passa de 3 para 6 elementos:

JSON.ARRAPPEND doc .id null false true

Saída esperada:

(integer) 6

JSON.ARRPOP

Sintaxe: JSON.ARRPOP key path [index]

Remove e retorna o elemento no índice especificado em um array. A complexidade de tempo é O(M×N), onde M é o número de elementos filhos na chave e N é o comprimento do array.

Parâmetros:

Parâmetro

Descrição

key

A chave TairDoc

path

Caminho do array

index

Índice do elemento a ser removido. Começa em 0; valores negativos contam a partir do final. Se omitido, o padrão é o último elemento

Valores de retorno:

Resultado

Valor de retorno

Sucesso

O elemento removido

O array está vazio

ERR array index outflow

Exemplo — remover o primeiro elemento de um array:

Primeiro, crie o documento:

JSON.SET doc . '{"id": [1,2,3]}'

Remova e retorne o elemento no índice 0 (o primeiro elemento, 1):

JSON.ARRPOP doc .id 0

Saída esperada:

"1"

JSON.ARRINSERT

Sintaxe: JSON.ARRINSERT key path [index] json [json ...]

Insere um ou mais elementos JSON em um array antes do índice especificado. A complexidade de tempo é O(M×N), onde M é o número de elementos a serem inseridos e N é o comprimento atual do array.

Parâmetros:

Parâmetro

Descrição

key

A chave TairDoc

path

Caminho do array

index

Posição antes da qual inserir. Começa em 0; valores negativos contam a partir do final. Se omitido, o padrão é a última posição

json

Um ou mais elementos JSON a serem inseridos

Valores de retorno:

Resultado

Valor de retorno

Sucesso

O novo comprimento do array

O array está vazio

ERR array index outflow

Exemplo — inserir elementos no início de um array:

Primeiro, crie o documento:

JSON.SET doc . '{"id": [1,2,3]}'

Insira 10 e 15 antes do índice 0. O array resultante é [10, 15, 1, 2, 3]:

JSON.ARRINSERT doc .id 0 10 15

Saída esperada:

(integer) 5

JSON.ARRLEN

Sintaxe: JSON.ARRLEN key path

Retorna o número de elementos em um array.

Parâmetros:

Parâmetro

Descrição

key

A chave TairDoc

path

Caminho do array

Valores de retorno:

Resultado

Valor de retorno

Sucesso

Comprimento do array

Chave não encontrada

-1

Exemplo — obter o comprimento de um array:

Primeiro, crie o documento:

JSON.SET doc . '{"id": [1,2,3]}'

Obtenha o número de elementos no array id:

JSON.ARRLEN doc .id

Saída esperada:

(integer) 3

JSON.ARRTRIM

Sintaxe: JSON.ARRTRIM key path start stop

Recorta um array para manter apenas os elementos dentro do intervalo [start, stop] (inclusivo) e remove todos os elementos fora desse intervalo.

Parâmetros:

Parâmetro

Descrição

key

A chave TairDoc

path

Caminho do array

start

Índice inicial (base 0, inclusivo)

stop

Índice final (base 0, inclusivo)

Valores de retorno:

Resultado

Valor de retorno

Sucesso

Comprimento do array após o recorte

Chave não encontrada

-1

Exemplo — recortar um array para um subintervalo:

Primeiro, crie o documento:

JSON.SET doc . '{"id": [1,2,3,4,5,6]}'

Recorte o array para manter apenas os elementos nos índices 3 e 4 (valores 4 e 5). Os elementos fora desse intervalo são descartados:

JSON.ARRTRIM doc .id 3 4

Saída esperada — 2 elementos permanecem:

(integer) 2

JSONPath

O JSON.GET aceita a sintaxe JSONPath RFC draft-4 para consultas flexíveis. O suporte total a JSONPath requer a versão 1.8.4 ou posterior.

Seletores aceitos:

Seletor

Descrição

$

Elemento raiz

@

Elemento atual

.name

Elemento filho

..

Elementos descendentes

*

Curinga — todos os elementos filhos ou de array

[ ]

Índice de array (base 0); aceita listas ([0,1]) e nomes de elementos (['name'])

[start:end:step]

Seletor de fatia de array

?...

Seletor de filtro

()

Expressão; prioridade do operador: ( ) &gt; &amp;&amp; &gt; \|\|

Exemplos de consulta:

Os exemplos a seguir usam este documento de uma livraria. Crie-o primeiro:

JSON.SET dockey $
'{
    "store": {
        "book": [{
                "category": "reference",
                "author": "Nigel Rees",
                "title": "Sayings of the Century",
                "price": 8.95
            },
            {
                "category": "fiction",
                "author": "Evelyn Waugh",
                "title": "Sword of Honour",
                "price": 12.99
            },
            {
                "category": "fiction",
                "author": "Herman Melville",
                "title": "Moby Dick",
                "isbn": "0-553-21311-3",
                "price": 8.99
            },
            {
                "category": "fiction",
                "author": "J. R. R. Tolkien",
                "title": "The Lord of the Rings",
                "isbn": "0-395-19395-8",
                "price": 22.99
            }
        ],
        "bicycle": {
            "color": "red",
            "price": 19.95
        }
    },
    "expensive": 10
}'

Saída esperada:

OK

Seletor raiz

Consulte o objeto JSON inteiro:

JSON.GET dockey $

Saída esperada:

"[{"store":{"book":[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Evelyn Waugh","title":"Sword of Honour","price":12.99},{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99},{"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price":22.99}],"bicycle":{"color":"red","price":19.95}}}]"

Seletor de ponto

Consulte todos os campos da bicicleta:

JSON.GET dockey $.store.bicycle.*

Saída esperada:

"["red",19.95]"

Consulte o preço da bicicleta:

JSON.GET dockey $.store.bicycle.price

Saída esperada:

"[19.95]"

Seletor de índice

Consulte todos os campos do primeiro livro:

JSON.GET dockey $.store.book[0]

Saída esperada:

"[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95}]"

Consulte os títulos de todos os livros:

JSON.GET dockey "$.store.book[*]['title']"

Saída esperada:

"["Sayings of the Century","Sword of Honour","Moby Dick","The Lord of the Rings"]"

Seletor de fatia de array

Consulte os três primeiros livros usando uma fatia com passo 1:

JSON.GET dockey $.store.book[0:2:1]

Saída esperada:

"[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99},{"category":"fiction","author":"Evelyn Waugh","title":"Sword of Honour","price":12.99}]"

Seletor de descendentes

Consulte todos os preços na loja (livros e bicicleta):

JSON.GET dockey $..price

Saída esperada:

"[8.95,12.99,8.99,22.99,19.95]"

Seletor de lista

Consulte o primeiro e o terceiro livros:

JSON.GET dockey $.store.book[0,2]

Saída esperada:

"[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99}]"

Seletor de filtro

Consulte livros que possuem um campo isbn:

JSON.GET dockey $.store.book[?(@.isbn)]

Saída esperada:

"[{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99},{"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price":22.99}]"

Consulte livros com preço inferior a 10:

JSON.GET dockey '$.store.book[?(@.price < 10)]'

Saída esperada:

"[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99}]"

Consulte livros com preço de 12,99, preço acima de 19,95 ou na categoria reference (expressão combinada):

JSON.GET dockey "$..book[?((@.price == 12.99 || @.price > $.store.bicycle.price) || @.category == 'reference')]"

Saída esperada:

"[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price":22.99},{"category":"fiction","author":"Evelyn Waugh","title":"Sword of Honour","price":12.99}]"

JSON Pointer

O TairDoc suporta totalmente a sintaxe JSON Pointer (RFC 6901). Use caminhos delimitados por / para navegar em um documento.

Exemplo — recuperar um elemento de array aninhado:

Primeiro, crie o documento:

JSON.SET doc . '{"foo": "bar", "baz" : [1,2,3]}'

Recupere o primeiro elemento do array baz usando o caminho JSON Pointer /baz/0:

JSON.GET doc /baz/0

Saída esperada:

"1"