JavaScript Object Notation (JSON) menyediakan cara yang efisien bagi Anda untuk menyimpan dan memanipulasi data terstruktur di Memorystore untuk Valkey. Penggunaan JSON memberikan manfaat berikut:
- Memiliki kemampuan penelusuran dan pemfilteran yang cepat
- Melakukan update di tempat pada data JSON tanpa harus menimpa seluruh dokumen
- Mengueri, mengubah, dan mengelola struktur data yang kompleks secara efisien
Jika aplikasi Anda memerlukan penyimpanan data yang dinamis dan fleksibel, maka JSON sangat ideal untuk Anda. Selain itu, dengan menggunakan JSON, Anda dapat mengenkode set data kompleks di dalam instance Memorystore untuk Valkey tanpa menggunakan skema. Anda dapat menyimpan, mengakses, dan memperbarui data di instance, dan Anda tidak perlu mengelola kode kustom untuk melakukan serialisasi dan deserialisasi data.
Dokumen JSON adalah format teks yang dapat dibaca manusia untuk menyimpan dan memindahkan data. Format ini terdiri dari pasangan nilai kunci dan jenis data terstruktur. Format JSON memungkinkan Anda mengambil dan memperbarui sebagian dokumen JSON tanpa harus memanipulasi seluruh objek. Tindakan ini dapat meningkatkan performa dan mengurangi biaya Anda. Selain itu, format JSON mematuhi RFC 7159, standar pertukaran data JSON ECMA-404, dan Unicode UTF-8 dalam teks JSON.
Ketersediaan
Jika Anda membuat instance Memorystore untuk Valkey, versi 8.0 dan yang lebih baru, maka jenis data JSON dan perintah terkait versi 1.0 akan tersedia secara otomatis. Jenis data ini kompatibel dengan API versi 2 modul JSON. Selain itu, mulai RFC 7159, elemen root dokumen JSON dapat berupa jenis data JSON apa pun.
Properti JSON
JSON memiliki properti berikut:
Ukuran dokumen maksimum: untuk mencegah potensi masalah kehabisan memori akibat penyisipan yang berbahaya atau tidak terbatas, Anda dapat mengonfigurasi batas ukuran masing-masing kunci JSON.
Secara default, nilai untuk properti ini ditetapkan ke
0, yang berarti tidak ada batas ukuran dokumen JSON. Untuk menetapkan batas ini, gunakan perintahCONFIG SET json.max-document-size VALUE, dengan VALUE adalah ukuran maksimum dokumen. Misalnya, jika Anda menentukan4123456, ukuran dokumen maksimum adalah 4.123.456 byte (4 MB).Untuk melihat jumlah memori yang digunakan oleh nilai JSON yang disimpan dalam kunci tertentu, Anda dapat menggunakan perintah
JSON.DEBUG MEMORY KEYatauMEMORY USAGE KEY. Untuk perintah ini, KEY adalah nama kunci tempat nilai JSON disimpan.Kedalaman maks: tingkat nesting maksimum untuk objek dan array JSON. Untuk mengetahui informasi selengkapnya, lihat Batas kedalaman bertingkat maksimum.
Ukuran dokumen JSON
Karena dokumen JSON disimpan secara internal dalam format yang dioptimalkan untuk
akses dan modifikasi cepat, jenis dokumen ini dapat menggunakan banyak
memori. Untuk memeriksa seberapa banyak memori yang digunakan dokumen JSON, gunakan perintah
JSON.DEBUG MEMORY KEY, dengan KEY adalah nama kunci yang berisi dokumen.
Kategori JSON
Untuk mengelola akses ke perintah JSON dan data, gunakan kategori @json. Selain kategori ini, kategori berikut menggunakan perintah JSON: @read, @write, @fast, @slow, dan @admin.
Tabel berikut menunjukkan apakah Anda dapat memetakan perintah JSON ke kategori @read,
@write, @fast, @slow, @admin, dan @json.
| Perintah JSON | @json |
@read |
@write |
@fast |
@slow |
@admin |
|---|---|---|---|---|---|---|
JSON.ARRAPPEND |
Y | N | Y | Y | N | N |
JSON.ARRINDEX |
Y | Y | N | Y | N | N |
JSON.ARRINSERT |
Y | N | Y | Y | N | N |
JSON.ARRLEN |
Y | Y | N | Y | N | N |
JSON.ARRPOP |
Y | N | Y | Y | N | N |
JSON.ARRTRIM |
Y | N | Y | Y | N | N |
JSON.CLEAR |
Y | N | Y | Y | N | N |
JSON.DEBUG |
Y | Y | N | N | Y | Y |
JSON.DEL |
Y | N | Y | Y | N | N |
JSON.FORGET |
Y | N | Y | Y | N | N |
JSON.GET |
Y | Y | N | Y | N | N |
JSON.MGET |
Y | Y | N | Y | N | N |
JSON.MSET |
Y | N | Y | N | Y | N |
JSON.NUMINCRBY |
Y | N | Y | Y | N | N |
JSON.NUMMULTBY |
Y | N | Y | Y | N | N |
JSON.OBJKEYS |
Y | Y | N | Y | N | N |
JSON.OBJLEN |
Y | Y | N | Y | N | N |
JSON.RESP |
Y | Y | N | Y | N | N |
JSON.SET |
Y | N | Y | N | Y | N |
JSON.STRAPPEND |
Y | N | Y | Y | N | N |
JSON.STRLEN |
Y | Y | N | Y | N | N |
JSON.TOGGLE |
Y | N | Y | Y | N | N |
JSON.TYPE |
Y | Y | N | Y | N | N |
Perintah JSON
Bagian ini mencantumkan dan menjelaskan perintah JSON yang dapat Anda gunakan untuk melakukan operasi pada dokumen JSON.
| Perintah | Deskripsi |
|---|---|
JSON.ARRAPPEND |
Menambahkan satu atau beberapa nilai JSON ke dalam array di jalur. |
JSON.ARRINDEX |
Menelusuri kemunculan pertama nilai JSON skalar dalam array. |
JSON.ARRINSERT |
Menyisipkan satu atau beberapa nilai JSON ke dalam array di jalur sebelum indeks yang Anda tentukan. |
JSON.ARRLEN |
Mengambil panjang array JSON di jalur. |
JSON.ARRPOP |
Menghapus dan menampilkan elemen dari indeks dalam array. |
JSON.ARRTRIM |
Memangkas array di jalur sehingga hanya berisi rentang inklusif elemen yang Anda tentukan. |
JSON.CLEAR |
Menghapus array atau objek JSON pada jalur yang Anda tentukan. |
JSON.DEBUG |
Mengambil informasi tentang dokumen JSON. Memorystore for Valkey
mendukung subperintah berikut:
|
JSON.DELJSON.FORGET |
Menghapus nilai JSON di jalur yang Anda tentukan. |
JSON.GET |
Menampilkan nilai di jalur yang Anda tentukan dalam bentuk serial JSON. |
JSON.MGET |
Menampilkan nilai di jalur yang Anda tentukan dari beberapa kunci dokumen. |
JSON.MSET |
Menetapkan beberapa nilai JSON di jalur ke beberapa kunci. |
JSON.NUMINCRBY |
Menambah nilai numerik yang disimpan di jalur dengan angka yang Anda tentukan. |
JSON.NUMMULTBY |
Mengalikan nilai numerik yang disimpan di jalur dengan angka yang Anda tentukan. |
JSON.OBJKEYS |
Mengambil nama kunci dari objek JSON di jalur yang Anda tentukan. |
JSON.OBJLEN |
Mengambil jumlah kunci dalam objek JSON di jalur yang Anda tentukan. |
JSON.RESP |
Menampilkan nilai JSON kunci dalam bentuk protokol serialisasi Redis (RESP). |
JSON.SET |
Tetapkan nilai JSON di jalur yang Anda tentukan. |
JSON.STRAPPEND |
Tambahkan string ke string JSON di jalur yang Anda tentukan. |
JSON.STRLEN |
Mengambil panjang nilai string JSON di jalur yang Anda tentukan. |
JSON.TOGGLE |
Mengganti nilai boolean antara true dan
false. Nilai ini disimpan di jalur yang Anda tentukan. |
JSON.TYPE |
Mengambil jenis nilai JSON di jalur yang Anda tentukan. |
Cara Memorystore for Valkey berinteraksi dengan JSON
Bagian ini menjelaskan cara Memorystore for Valkey berinteraksi dengan jenis data JSON.
Beberapa ekspresi bersyarat
Jika ada beberapa ekspresi bersyarat untuk pemfilteran, maka Memorystore untuk Valkey akan mengevaluasinya dalam urutan berikut:
- Operasi di dalam tanda kurung
- Ekspresi logis
AND(&&) - Ekspresi logis
OR(||)
Batas kedalaman nesting maksimum
Jika objek atau array JSON memiliki elemen yang merupakan objek atau array JSON lain,
objek atau array dalam akan berada di dalam objek atau array luar. Batas kedalaman bertingkat maksimum adalah 128. Jadi, nilai seperti $.a.b.c.d... hanya dapat mencapai 128
level.
Jika Anda mencoba membuat dokumen JSON yang berisi kedalaman bertingkat lebih dari 128, Memorystore untuk Valkey akan menolak dokumen tersebut dan Anda akan menerima error. Namun, Anda dapat menyesuaikan batas ini menggunakan perintah CONFIG SET json.max-path-limit VALUE, dengan
VALUE adalah batas kedalaman yang Anda inginkan.
Angka JSON
Dalam JSON, bilangan floating point dan bilangan bulat disebut bilangan karena memiliki jenis data yang sama. Saat menerima angka JSON, Memorystore untuk Valkey akan mengonversi angka tersebut menjadi salah satu representasi biner internal berikut:
- Bilangan floating point presisi ganda IEEE 64-bit
- Bilangan bulat 64-bit bertanda
JSON tidak mempertahankan string asli dan semua pemformatannya. Saat Memorystore untuk Valkey menampilkan angka sebagai bagian dari respons JSON, Memorystore untuk Valkey mengonversi angka dari representasi biner internal ke string yang dapat dicetak yang menggunakan aturan pemformatan umum.
Saat Anda menggunakan perintah JSON.NUMINCRBY dan JSON.NUMMULTBY
dengan angka JSON, kondisi berikut berlaku:
- Jika kedua angka adalah bilangan bulat dan hasilnya berada di luar rentang
int64, maka hasilnya akan otomatis menjadi angka floating point presisi ganda IEEE 64-bit. - Jika setidaknya salah satu angka adalah angka floating point, maka hasilnya adalah angka floating point presisi ganda IEEE 64-bit.
- Jika hasilnya melebihi rentang angka floating point presisi ganda IEEE 64-bit, Anda akan menerima pesan error
OVERFLOW.
Array langsung
Memorystore for Valkey memfilter objek array secara langsung. Misalnya, jika Anda memiliki data seperti
[0,1,2,3] dan kueri jalur seperti $[?(@<3)], maka Memorystore untuk Valkey akan menampilkan [0,1,2]. Untuk data seperti {"my_valkey_key":[0,1,2,3]}
dan kueri jalur seperti
$.my_valkey_key[?(@<3)],
Memorystore for Valkey juga menampilkan [0,1,2].
Indeks array
Memorystore for Valkey memungkinkan Anda menggunakan indeks positif dan negatif untuk array. Kondisi berikut berlaku untuk jenis indeks ini:
- Indeks positif: angka dimulai dari awal array. Misalnya, jika array memiliki indeks positif tiga, maka 0 mengkueri elemen pertama, 1 mengkueri elemen kedua, dan 2 mengkueri elemen ketiga.
- Indeks negatif: angka dimulai dari akhir array. Jika array memiliki indeks negatif tiga, maka -1 mengkueri elemen ketiga, -2 mengkueri elemen kedua, dan -3 mengkueri elemen pertama.
Memorystore for Valkey tidak membulatkan indeks ke atas atau ke bawah. Jika Anda memiliki array dengan panjang 3, dan Anda memanggil indeks positif yang lebih besar dari 3 atau indeks negatif yang lebih kecil dari -3, maka Memorystore untuk Valkey tidak akan menampilkan hasil.
Sintaksis untuk jalur JSON
Anda tidak dapat menggunakan sintaksis yang tidak valid untuk jalur JSON. Kondisi ini berlaku, meskipun subset jalur JSON dengan sintaksis yang tidak valid berisi jalur yang valid.