Tentang JSON

JavaScript Object Notation (JSON) menyediakan cara yang efisien bagi Anda untuk menyimpan dan memanipulasi data terstruktur di Memorystore for Redis Cluster. 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, JSON adalah pilihan yang ideal untuk Anda. Selain itu, dengan menggunakan JSON, Anda dapat mengenkode set data kompleks di dalam cluster di Memorystore for Redis Cluster tanpa menggunakan skema. Anda dapat menyimpan, mengakses, dan memperbarui data di cluster, 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 cluster di Memorystore for Redis Cluster, 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 perintah CONFIG SET json.max-document-size VALUE, dengan VALUE adalah ukuran maksimum dokumen. Misalnya, jika Anda menentukan 4123456, 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 KEY atau MEMORY 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 Redis Cluster mendukung subperintah berikut:
  • MEMORY: melaporkan penggunaan memori nilai dalam byte.
  • DEPTH: melaporkan kedalaman jalur maksimum dokumen JSON.
  • FIELDS: melaporkan jumlah kolom dalam elemen JSON. Elemen ini disimpan pada kunci yang Anda tentukan.
  • HELP: menampilkan informasi bermanfaat tentang perintah JSON.DEBUG.
JSON.DEL
JSON.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 Redis Cluster berinteraksi dengan JSON

Bagian ini menjelaskan cara Memorystore for Redis Cluster berinteraksi dengan jenis data JSON.

Beberapa ekspresi bersyarat

Jika ada beberapa ekspresi bersyarat untuk pemfilteran, maka Memorystore for Redis Cluster akan mengevaluasinya dalam urutan berikut:

  1. Operasi di dalam tanda kurung
  2. Ekspresi logis AND (&&)
  3. 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, maka Memorystore untuk Cluster Redis 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 for Redis Cluster 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 for Redis Cluster menampilkan angka sebagai bagian dari respons JSON, Memorystore for Redis Cluster 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 Redis Cluster memfilter objek array secara langsung. Misalnya, jika Anda memiliki data seperti
&lbrack;0,1,2,3&rbrack; dan kueri jalur seperti $[?(@<3)], maka Memorystore for Redis Cluster akan menampilkan &lbrack;0,1,2&rbrack;. Untuk data seperti {"my_valkey_key":[0,1,2,3]} dan kueri jalur seperti
$.my_valkey_key[?(@<3)], Memorystore for Redis Cluster juga menampilkan &lbrack;0,1,2&rbrack;.

Indeks array

Memorystore for Redis Cluster 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 Redis Cluster 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 kurang dari -3, maka Memorystore untuk Cluster Redis 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.