Todos os produtos
Search
Central de documentação

Tair (Redis® OSS-Compatible):Doc

Última atualização: Jun 26, 2026

TairDoc é uma estrutura de dados de documentos semelhante ao RedisJSON. Use-o 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) via JSON.GET; seletores específicos como wildcard 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 via JSON.GET

Notas de versão:

  1. O TairDoc foi lançado junto com as instâncias otimizadas para memória do Tair. Ele oferece suporte à sintaxe JSONPointer completa e à sintaxe JSONPath parcial (somente JSON.GET aceita a sintaxe JSONPath).

  2. Em 17 de maio de 2022, o TairDoc V1.8.4 foi lançado com suporte completo a JSONPath para JSON.GET, incluindo o seletor wildcard de ponto, o seletor de índice e o seletor de filtro. Recomendamos atualizar a versão secundária da instância para 1.8.4 ou posterior.

Pré-requisitos

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

Para atualizar sua instância para a versão secundária mais recente, consulte Atualizar a versão secundária de uma instância.

Em instâncias do tipo cluster ou com divisão de leitura/gravação, atualize os nós proxy para a versão secundária mais recente a fim de garantir o funcionamento correto de todos os comandos.

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

Retorna 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

Acrescenta uma string a um elemento JSON do tipo string

O(N)

JSON.STRLEN

Retorna o comprimento de um elemento JSON do tipo string

O(N)

JSON.ARRAPPEND

Acrescenta 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 índice especificado em um array

O(M×N)

JSON.ARRLEN

Retorna o comprimento de um array

O(N)

JSON.ARRTRIM

Reduz um array a 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 que pode ser repetido

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, o elemento é atualizado.

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 somente se o caminho não existir

XX

Grava somente 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 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. Aceita as sintaxes JSONPath e JSON Pointer.

Parâmetros:

Parâmetro

Descrição

key

A chave TairDoc

path

Caminho dentro da chave. Aceita a sintaxe 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 somente quando FORMAT XML está definido

ARRNAME

Nome da tag para elementos de array na saída XML. Válido somente 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 nome da tag raiz e ARR como nome da tag de 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, a chave inteira é excluída. Não faz nada caso a chave ou o caminho não exista.

Parâmetros:

Parâmetro

Descrição

key

A chave TairDoc

path

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

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. Permite adicionar novos valores, atualizar valores existentes e excluir valores no caminho indicado.

Parâmetros:

Parâmetro

Descrição

key

A chave TairDoc

path

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

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 interpretar 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 (o que o exclui), atualize f2.a e adicione f2.b, além de inserir 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 .. A chave f1 é removida porque definir um campo como null em um patch de mesclagem 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. O elemento existente e o valor do 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

Acrescenta uma string ao elemento JSON do tipo string no caminho especificado. O elemento existente e o valor acrescentado devem ser do tipo string.

Parâmetros:

Parâmetro

Descrição

key

A chave TairDoc

path

Caminho do elemento string

json-string

A string a ser acrescentada

Valores de retorno:

Resultado

Valor de retorno

Sucesso

O novo comprimento da string

Chave não encontrada

-1

Exemplo — acrescentar a um campo string:

Primeiro, crie o documento:

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

Acrescente rrrrr a foo"bar" passa a ser "barrrrrr", com 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 JSON do tipo string no caminho especificado. O elemento deve ser do tipo string.

Parâmetros:

Parâmetro

Descrição

key

A chave TairDoc

path

Caminho do elemento string

Valores de retorno:

Resultado

Valor de retorno

Sucesso

Comprimento da string

Chave não encontrada

-1

Exemplo — obter o comprimento de um campo string:

Primeiro, crie o documento:

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

Obtenha o comprimento de foo"bar" tem 3 caracteres:

JSON.STRLEN doc .foo

Saída esperada:

(integer) 3

JSON.ARRAPPEND

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

Acrescenta 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 acrescentar 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 acrescentados

Valores de retorno:

Resultado

Valor de retorno

Sucesso

O novo comprimento do array

Chave não encontrada

-1

Exemplo — acrescentar múltiplos elementos a um array:

Primeiro, crie o documento:

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

Acrescente null, false e true ao array id. O array cresce 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 de 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. Por padrão, remove o último elemento

Valores de retorno:

Resultado

Valor de retorno

Sucesso

O elemento removido

Array 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 inserir 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. Por padrão, insere na ú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

Array 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

Reduz um array para que apenas os elementos dentro do intervalo [start, stop] (inclusivo) sejam mantidos. Todos os elementos fora desse intervalo são removidos.

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 a redução

Chave não encontrada

-1

Exemplo — reduzir um array a um subintervalo:

Primeiro, crie o documento:

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

Reduza 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

JSON.GET oferece suporte à sintaxe JSONPath RFC draft-4 para consultas flexíveis. O suporte completo a JSONPath exige a versão 1.8.4 ou posterior.

Seletores compatíveis:

Seletor

Descrição

$

Elemento raiz

@

Elemento atual

.name

Elemento filho

..

Elementos descendentes

*

Wildcard — 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 de operadores: `( ) > && >

`

Exemplos de consulta:

Os exemplos a seguir utilizam este documento de 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

Root selector

Consulte o objeto JSON completo:

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}}}]"

Dot selector

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]"

Index selector

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"]"

Array slice selector

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}]"

Descendant selector

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

JSON.GET dockey $..price

Saída esperada:

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

List selector

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}]"

Filter selector

Consulte os livros que possuem o 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 os livros com preço abaixo de 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 os livros com preço igual a 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 oferece suporte completo à sintaxe JSON Pointer (RFC 6901). Use caminhos delimitados por / para navegar dentro de 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"