Tüm Ürünler
Search
Belge Merkezi

Tair (Redis® OSS-Compatible):Doc

Son Güncelleme:Oct 03, 2026

TairDoc, RedisJSON benzeri bir belge veri yapısıdır. Tam CRUD desteğiyle JSON belgelerini depolamak, sorgulamak ve değiştirmek için kullanın.

Temel özellikler:

  • Tam JSON standardı desteği

  • JSON.GET aracılığıyla JSONPath desteği (RFC taslağı-4); nokta joker karakteri, dizin ve filtre seçicileri gibi belirli seçiciler için sürüm 1.8.4 veya üzeri gerekir

  • Tam JSON Pointer sözdizimi desteği (RFC 6901)

  • Alt öğelerin verimli şekilde alınması için ikili ağaç depolama

  • JSON.GET aracılığıyla JSON'dan XML'e ve JSON'dan YAML'e dönüştürme

Sürüm notları:

  1. TairDoc, Tair bellek optimize edilmiş örneklerle birlikte piyasaya sürüldü. Tam JSONPointer sözdizimini ve kısmi JSONPath sözdizimini destekler (yalnızca JSON.GET JSONPath sözdizimini destekler).

  2. 17 Mayıs 2022'de, JSON.GET için tam JSONPath desteğiyle TairDoc V1.8.4 sürümü yayınlandı; bu sürüm nokta joker karakteri seçicisini, dizin seçicisini ve filtre seçicisini içerir. Örneğinizin küçük sürümünü 1.8.4 veya daha yeni bir sürüme güncellemenizi öneririz.

Ön Koşullar

Başlamadan önce şunlara sahip olduğunuzdan emin olun:

  • Bir Tair DRAM tabanlı örnek

  • Örnek küçük sürümü 1.8.4 veya üzeri (JSON.GET aracılığıyla tam JSONPath desteği için gereklidir)

Örneğinizi en son küçük sürüme güncellemek için bkz. Örneğin küçük sürümünü güncelleme.

Küme veya okuma/yazma ayrımı yapan örnekler için, tüm komutların beklendiği gibi çalışmasını sağlamak üzere proxy düğümlerini en son küçük sürüme güncelleyin.

Komut listesi

Komut Açıklama Zaman karmaşıklığı
JSON.SET Bir TairDoc anahtarı oluşturun veya bir yoldaki JSON öğesini güncelleyin O(N)
JSON.GET Bir yoldan bir JSON öğesi alın O(N)
JSON.DEL Bir JSON öğesini veya anahtarı silin O(N)
JSON.TYPE Bir JSON öğesinin türünü alın O(N)
JSON.MERGE Bir JSON değerini bir yolla birleştirin O(N)
JSON.NUMINCRBY Sayısal bir JSON öğesini artırın O(N)
JSON.STRAPPEND Bir JSON dize öğesine dize ekleyin O(N)
JSON.STRLEN Bir JSON dize öğesinin uzunluğunu alın O(N)
JSON.ARRAPPEND Bir dizinin sonuna öğeler ekleyin O(M×N)
JSON.ARRPOP Bir diziden bir öğeyi kaldırın ve döndürün O(M×N)
JSON.ARRINSERT Bir dizide verilen dizinden önce öğeler ekleyin O(M×N)
JSON.ARRLEN Bir dizinin uzunluğunu alın O(N)
JSON.ARRTRIM Bir diziyi belirtilen aralığa kırpın O(N)
DEL Bir veya daha fazla TairDoc anahtarını silin (yerel Redis komutu) —

Bu referansta kullanılan sözdizimi kuralları:

  • BÜYÜK HARF: komut anahtar kelimesi

  • _italik_: değişken

  • [seçenek]: isteğe bağlı parametre

  • A | B: birbirini dışlayan seçenekler

  • ...: parametre tekrar edilebilir

JSON.SET

Sözdizimi: JSON.SET anahtar yol json [NX | XX]

Bir TairDoc anahtarı oluşturur ve belirtilen yolda bir JSON öğesi depolar. Anahtar ve yol zaten varsa öğeyi günceller.

Parametreler:

Parametre Açıklama
key TairDoc anahtarı
path Anahtar içindeki yol. Kök için . veya $ kullanın
json Depolanacak JSON öğesi
NX Yalnızca yol yoksa yazın
XX Yalnızca yol zaten varsa yazın

Dönüş değerleri:

Sonuç Dönüş değeri
Başarılı OK
XX belirtildi ancak yol yok nil
NX belirtildi ancak yol zaten var nil
Geçersiz yol ERR could not find object to add, please check path

Örnek — JSON belgesi oluşturma:

Aşağıdaki komut, kök yolda ($) bir doc anahtarı oluşturur ve dört kitap ile bir bisiklet içeren bir kitapçı belgesi depolar:

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 } } }'

Beklenen çıktı:

OK

JSON.GET

Sözdizimi: JSON.GET anahtar yol [FORMAT XML | YAML] [ROOTNAME kök] [ARRNAME dizi]

Belirtilen yoldaki JSON öğesini alır. Hem JSONPath hem de JSON Pointer sözdizimini destekler.

Parametreler:

Parametre Açıklama
key TairDoc anahtarı
path Anahtar içindeki yol. JSONPath ($ stili) ve JSON Pointer (. stili) sözdizimini kabul eder
FORMAT Çıktı biçimi: XML veya YAML. Atlanırsa JSON döndürür
ROOTNAME XML çıktısında kök öğe için etiket adı. Yalnızca FORMAT XML ayarlandığında geçerlidir
ARRNAME XML çıktısında dizi öğeleri için etiket adı. Yalnızca FORMAT XML ayarlandığında geçerlidir

Dönüş değerleri:

Sonuç Dönüş değeri
Başarılı Belirtilen yoldaki JSON öğesi
Hata Hata mesajı

Örnek — belgeyi XML olarak alma:

Önce belgeyi oluşturun:

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

Ardından, kök etiket adı olarak ROOT ve dizi etiket adı olarak ARR belirterek XML olarak alın:

JSON.GET doc . FORMAT XML ROOTNAME ROOT ARRNAME ARR

Beklenen çıktı:

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

JSON.DEL

Sözdizimi: JSON.DEL anahtar yol

Belirtilen yoldaki JSON öğesini siler. Yol verilmezse tüm anahtarı siler. Anahtar veya yol yoksa sessizce hiçbir işlem yapmaz.

Parametreler:

Parametre Açıklama
key TairDoc anahtarı
path Silinecek öğenin yolu. Atlanırsa tüm anahtar silinir

Dönüş değerleri:

Sonuç Dönüş değeri
Başarılı 1
Anahtar veya yol bulunamadı 0

Örnek — alan silme:

Önce belgeyi oluşturun:

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

foo alanını silin:

JSON.DEL doc .foo

Beklenen çıktı — 1 öğenin silindiğini gösterir:

(integer) 1

JSON.TYPE

Sözdizimi: JSON.TYPE anahtar yol

Belirtilen yoldaki JSON öğesinin türünü döndürür.

Parametreler:

Parametre Açıklama
key TairDoc anahtarı
path Öğenin yolu

Dönüş değerleri:

Sonuç Dönüş değeri
Başarılı Şunlardan biri: boolean, string, number, array, object, raw, reference, const, null
Başarısız 0
Anahtar veya yol bulunamadı nil

Örnek — alanın türünü alma:

Önce belgeyi oluşturun:

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

foo alanının türünü alın ("bar" bir dizedir):

JSON.TYPE doc .foo

Beklenen çıktı:

string

JSON.MERGE

Sözdizimi: JSON.MERGE anahtar yol değer

Bir JSON değerini belirtilen yolla birleştirir. Yeni değerler eklemeyi, mevcut değerleri güncellemeyi ve belirtilen yoldaki değerleri silmeyi destekler.

Parametreler:

Parametre Açıklama
key TairDoc anahtarı
path Birleştirilecek yol. Kısmi JSONPath sözdizimini destekler (ör. $.a.b.c, $.a['b']). Özyinelemeli azaltmayı ($..) veya joker karakter ($*) ifadelerini desteklemez
value Birleştirilecek JSON değeri. JSON Merge Patch (RFC 7386) ile uyumludur

Dönüş değerleri:

Sonuç Dönüş değeri
Başarılı OK
Geçersiz değer Hata (birleştirme yaması ayrıştırılamadı)

Örnek — tek işlemde değer ekleme, güncelleme ve silme:

Önce belgeyi oluşturun:

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

Değişiklikleri birleştirin: f1 değerini null olarak ayarlayın (silinir), f2.a değerini güncelleyin ve f2.b ekleyin ve yeni bir f3 dizisi ekleyin:

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

Beklenen çıktı:

OK

Sonucu JSON.GET doc . ile doğrulayın. Birleştirme yamasında bir alanı null olarak ayarlamak onu sildiğinden f1 anahtarı kaldırılır:

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

JSON.NUMINCRBY

Sözdizimi: JSON.NUMINCRBY anahtar yol değer

Belirtilen yoldaki sayısal JSON öğesini artırır. Hem mevcut öğe hem de artış değeri aynı türde olmalıdır — tamsayı veya ondalık sayı.

Parametreler:

Parametre Açıklama
key TairDoc anahtarı
path Sayısal öğenin yolu
value Eklenecek miktar

Dönüş değerleri:

Sonuç Dönüş değeri
Başarılı Artırımdan sonraki yeni değer
Anahtar veya yol bulunamadı Hata

Örnek — sayısal alanı artırma:

Önce belgeyi oluşturun:

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

baz değerini 10 artırın (42 + 10 = 52):

JSON.NUMINCRBY doc .baz 10

Beklenen çıktı:

"52"

JSON.STRAPPEND

Sözdizimi: JSON.STRAPPEND anahtar yol json-dizesi

Belirtilen yoldaki JSON dize öğesine bir dize ekler. Hem mevcut öğe hem de eklenen değer string türünde olmalıdır.

Parametreler:

Parametre Açıklama
key TairDoc anahtarı
path Dize öğesinin yolu
json-string Eklenecek dize

Dönüş değerleri:

Sonuç Dönüş değeri
Başarılı Dizenin yeni uzunluğu
Anahtar bulunamadı -1

Örnek — dize alanına ekleme yapma:

Önce belgeyi oluşturun:

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

foo değerine rrrrr ekleyin — "bar" değeri "barrrrrr" olur ve 8 karakter uzunluğundadır:

JSON.STRAPPEND doc .foo rrrrr

Beklenen çıktı:

(integer) 8

JSON.STRLEN

Sözdizimi: JSON.STRLEN anahtar yol

Belirtilen yoldaki JSON dize öğesinin karakter uzunluğunu döndürür. Öğe string türünde olmalıdır.

Parametreler:

Parametre Açıklama
key TairDoc anahtarı
path Dize öğesinin yolu

Dönüş değerleri:

Sonuç Dönüş değeri
Başarılı Dizenin uzunluğu
Anahtar bulunamadı -1

Örnek — dize alanının uzunluğunu alma:

Önce belgeyi oluşturun:

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

foo değerinin uzunluğunu alın — "bar" 3 karakter uzunluğundadır:

JSON.STRLEN doc .foo

Beklenen çıktı:

(integer) 3

JSON.ARRAPPEND

Sözdizimi: JSON.ARRAPPEND anahtar yol json [json ...]

Bir veya daha fazla JSON öğesini bir dizinin sonuna ekler. Zaman karmaşıklığı O(M×N)'dir; burada M eklenecek öğe sayısı, N ise mevcut dizi uzunluğudur.

Parametreler:

Parametre Açıklama
key TairDoc anahtarı
path Dizinin yolu
json Eklenecek bir veya daha fazla JSON öğesi

Dönüş değerleri:

Sonuç Dönüş değeri
Başarılı Dizinin yeni uzunluğu
Anahtar bulunamadı -1

Örnek — diziye birden çok öğe ekleme:

Önce belgeyi oluşturun:

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

id dizisine null, false ve true ekleyin. Dizi 3 öğeden 6 öğeye çıkar:

JSON.ARRAPPEND doc .id null false true

Beklenen çıktı:

(integer) 6

JSON.ARRPOP

Sözdizimi: JSON.ARRPOP anahtar yol [dizin]

Bir dizide belirtilen dizindeki öğeyi kaldırır ve döndürür. Zaman karmaşıklığı O(M×N)'dir; burada M anahtardaki alt öğe sayısı, N ise dizi uzunluğudur.

Parametreler:

Parametre Açıklama
key TairDoc anahtarı
path Dizinin yolu
index Kaldırılacak öğenin dizini. 0 ile başlar; negatif değerler sondan sayılır. Atlanırsa varsayılan olarak son öğe kullanılır

Dönüş değerleri:

Sonuç Dönüş değeri
Başarılı Kaldırılan öğe
Dizi boş ERR array index outflow

Örnek — dizinin ilk öğesini kaldırma:

Önce belgeyi oluşturun:

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

0 dizinindeki öğeyi (ilk öğe, 1) kaldırın ve döndürün:

JSON.ARRPOP doc .id 0

Beklenen çıktı:

"1"

JSON.ARRINSERT

Sözdizimi: JSON.ARRINSERT anahtar yol [dizin] json [json ...]

Bir veya daha fazla JSON öğesini bir diziye belirtilen dizinden önce ekler. Zaman karmaşıklığı O(M×N)'dir; burada M eklenecek öğe sayısı, N ise mevcut dizi uzunluğudur.

Parametreler:

Parametre Açıklama
key TairDoc anahtarı
path Dizinin yolu
index Öncesine eklenecek konum. 0 ile başlar; negatif değerler sondan sayılır. Atlanırsa varsayılan olarak son konum kullanılır
json Eklenecek bir veya daha fazla JSON öğesi

Dönüş değerleri:

Sonuç Dönüş değeri
Başarılı Dizinin yeni uzunluğu
Dizi boş ERR array index outflow

Örnek — dizinin başına öğe ekleme:

Önce belgeyi oluşturun:

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

0 dizininden önce 10 ve 15 ekleyin. Sonuçta oluşan dizi [10, 15, 1, 2, 3] olur:

JSON.ARRINSERT doc .id 0 10 15

Beklenen çıktı:

(integer) 5

JSON.ARRLEN

Sözdizimi: JSON.ARRLEN anahtar yol

Bir dizideki öğe sayısını döndürür.

Parametreler:

Parametre Açıklama
key TairDoc anahtarı
path Dizinin yolu

Dönüş değerleri:

Sonuç Dönüş değeri
Başarılı Dizinin uzunluğu
Anahtar bulunamadı -1

Örnek — dizinin uzunluğunu alma:

Önce belgeyi oluşturun:

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

id dizisindeki öğe sayısını alın:

JSON.ARRLEN doc .id

Beklenen çıktı:

(integer) 3

JSON.ARRTRIM

Sözdizimi: JSON.ARRTRIM anahtar yol başlangıç bitiş

Bir diziyi yalnızca [başlangıç, bitiş] aralığındaki (dahil) öğelerin kalacak şekilde kırpar. Bu aralığın dışındaki tüm öğeler kaldırılır.

Parametreler:

Parametre Açıklama
key TairDoc anahtarı
path Dizinin yolu
start Başlangıç dizini (0 tabanlı, dahil)
stop Bitiş dizini (0 tabanlı, dahil)

Dönüş değerleri:

Sonuç Dönüş değeri
Başarılı Kırpıldıktan sonra dizinin uzunluğu
Anahtar bulunamadı -1

Örnek — diziyi alt aralığa kırpma:

Önce belgeyi oluşturun:

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

Diziyi yalnızca 3 ve 4 dizinlerindeki öğeleri (değerler 4 ve 5) tutacak şekilde kırpın. Bu aralığın dışındaki öğeler atılır:

JSON.ARRTRIM doc .id 3 4

Beklenen çıktı — 2 öğe kalır:

(integer) 2

JSONPath

JSON.GET esnek sorgular için JSONPath RFC taslağı-4 sözdizimini destekler. Tam JSONPath desteği için sürüm 1.8.4 veya üzeri gerekir.

Desteklenen seçiciler:

Seçici Açıklama
$ Kök öğe
@ Geçerli öğe
.name Alt öğe
.. Torun öğeler
* Joker karakter — tüm alt veya dizi öğeleri
[ ] Dizi dizini (0 tabanlı); listeleri ([0,1]) ve öğe adlarını (['name']) destekler
[start:end:step] Dizi dilimleme seçicisi
?... Filtre seçicisi
() İfade; işleç önceliği: `( ) > && > `

Sorgu örnekleri:

Aşağıdaki örnekler bu kitapçı belgesini kullanır. Önce oluşturun:

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
}'

Beklenen çıktı:

OK

Kök seçici

Tüm JSON nesnesini sorgulayın:

JSON.GET dockey $

Beklenen çıktı:

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

Nokta seçici

Bisikletin tüm alanlarını sorgulayın:

JSON.GET dockey $.store.bicycle.*

Beklenen çıktı:

"["red",19.95]"

Bisiklet fiyatını sorgulayın:

JSON.GET dockey $.store.bicycle.price

Beklenen çıktı:

"[19.95]"

Dizin seçici

İlk kitabın tüm alanlarını sorgulayın:

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

Beklenen çıktı:

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

Tüm kitapların başlıklarını sorgulayın:

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

Beklenen çıktı:

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

Dizi dilimleme seçicisi

Adım 1 olan bir dilim kullanarak ilk üç kitabı sorgulayın:

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

Beklenen çıktı:

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

Torun seçici

Mağazadaki tüm fiyatları (hem kitaplar hem de bisiklet) sorgulayın:

JSON.GET dockey $..price

Beklenen çıktı:

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

Liste seçici

İlk ve üçüncü kitapları sorgulayın:

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

Beklenen çıktı:

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

Filtre seçici

isbn alanı olan kitapları sorgulayın:

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

Beklenen çıktı:

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

Fiyatı 10'un altında olan kitapları sorgulayın:

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

Beklenen çıktı:

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

Fiyatı 12,99 olan, fiyatı 19,95'in üzerinde olan veya reference kategorisindeki kitapları sorgulayın (birleşik ifade):

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

Beklenen çıktı:

"[{"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

TairDoc, JSON Pointer sözdizimini (RFC 6901) tam olarak destekler. Bir belgeye gitmek için / ile ayrılmış yolları kullanın.

Örnek — iç içe geçmiş dizi öğesini alma:

Önce belgeyi oluşturun:

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

JSON Pointer yolu /baz/0 kullanarak baz dizisinin ilk öğesini alın:

JSON.GET doc /baz/0

Beklenen çıktı:

"1"