Redis adalah server struktur data yang menyimpan seluruh data di dalam memori utama dan melayani permintaan klien melalui koneksi jaringan. Topik ini menjelaskan karakter utama Redis, jenis struktur data yang disediakan, kedudukan Redis di dalam arsitektur aplikasi modern, dan batasan yang menyertainya. Setelah konsepnya dipahami, praktik penyiapan dan perintah pada jalur ini dapat diikuti dengan konteks yang tepat.
Server struktur data dalam memori#
Nama Redis berasal dari REmote DIctionary Server, yakni kamus jarak jauh. Penamaan itu menggambarkan cara kerjanya: data disimpan sebagai pasangan key dan nilai, sebagaimana kamus menyimpan entri. Klien tidak membaca berkas dan tidak menulis kueri SQL, melainkan mengirim perintah singkat seperti SET untuk menyimpan nilai dan GET untuk membacanya. Server Redis mengeksekusi perintah tersebut secara berurutan, lalu mengembalikan jawaban kepada klien yang mengirimkannya.
Karakter yang paling menonjol adalah tempat data berada. Redis menyimpan seluruh data di dalam memori utama, bukan di disk. Karena akses memori jauh lebih cepat daripada akses disk, pembacaan dan penulisan pada Redis biasanya selesai dalam waktu submilidetik. Kecepatan semacam ini menjadikan Redis tepat untuk data yang sering diakses dan sensitif terhadap latensi, seperti hasil cache perhitungan, session pengguna, dan posisi leaderboard.
Model client-server juga membuat Redis dapat digunakan bersama oleh banyak proses sekaligus. Aplikasi web, pekerja latar belakang (background worker), dan skrip utilitas dapat membuka koneksi ke server Redis yang sama serta berbagi data melalui key yang sama. Keadaan bersama semacam ini sulit dibangun bila setiap proses menyimpan data di memori masing-masing.
Struktur data sebagai nilai#
Nilai pada sebuah key tidak selalu berupa string sederhana. Redis menyediakan beberapa tipe struktur data, dan setiap tipe dilengkapi perintah khusus yang beroperasi pada keseluruhan strukturnya, bukan pada satu elemen demi satu elemen. Tabel berikut merangkum tipe yang paling sering digunakan beserta contoh kebutuhannya.
| Tipe | Isi | Contoh kebutuhan |
|---|---|---|
| string | teks, bilangan bulat, atau bita biner | cache nilai, flag, penghitung |
| list | urutan string yang dapat diisi dan ditarik dari kedua ujung | antrean tugas sederhana |
| set | kumpulan string unik tanpa urutan | keanggotaan dan penandaan |
| sorted set | kumpulan unik yang setiap anggotanya membawa skor terurut | leaderboard dan peringkat |
| hash | pasangan field dan nilai dalam satu key | penyimpanan objek ringkas |
| stream | log peristiwa dengan ID otomatis | jejak peristiwa aplikasi |
Tipe-tipe pada tabel di atas menjadi fondasi untuk hampir semua pola penggunaan Redis. Yang paling mendasar adalah string, yaitu tipe yang dioperasikan oleh perintah dasar seperti SET, GET, dan INCR. Setelah string dikuasai, tipe lain mengikuti pola yang sama: perintahnya menyesuaikan struktur yang dituju, sedangkan model key dan nilai tetap identik.
Kedudukan Redis dalam arsitektur aplikasi#
Redis jarang berdiri sebagai satu-satunya tempat penyimpanan aplikasi. Basis data utama tetap menjadi rumah data yang harus bertahan dalam jangka panjang, sedangkan Redis melayani data yang membutuhkan akses cepat, data sementara, dan koordinasi antarproses. Pola yang paling umum adalah cache: hasil perhitungan atau pembacaan yang mahal disimpan pada Redis dengan masa hidup tertentu, sehingga permintaan berikutnya tidak perlu mengulang pekerjaan yang sama.
Diagram berikut menempatkan Redis di antara aplikasi backend dan basis data utama. Aplikasi bertukar perintah dan respons dengan Redis secara langsung, sedangkan basis data utama tetap menyimpan data secara menetap di disk. Kedua penyimpanan itu saling melengkapi, bukan saling menggantikan.
Di luar peran cache, Redis juga sering menjadi penghubung antarbagian aplikasi. Antrean tugas dibangun dengan list atau stream, penghitung laju dengan string dan INCR, serta koordinasi kejadian dengan pub/sub. Karena semua proses terhubung ke server yang sama, Redis menjadi titik pertemuan alami bagi data yang harus dibagikan dengan cepat.
Batasan yang perlu dipahami#
Kecepatan Redis bersumber dari memori, dan memori memiliki batas kapasitas. Dataset idealnya muat di dalam memori yang tersedia, karena apabila kapasitas penuh, Redis melakukan eviksi (eviction), yaitu pembuangan key sesuai kebijakan yang ditetapkan, atau menolak penulisan baru. Perencanaan kapasitas dan masa hidup key menjadi bagian penting dari penggunaan Redis, dan keduanya dibahas lebih rinci pada jalur ini.
Selain batas kapasitas, data di dalam memori mudah hilang apabila proses server berhenti. Redis menyediakan persistensi, yaitu penyimpanan berkala ke disk melalui snapshot RDB dan berkas AOF, tetapi tingkat ketahanannya bergantung pada konfigurasi yang dipilih. Data yang benar-benar harus menetap sebaiknya tetap diserahkan kepada basis data utama, sedangkan Redis menangani data yang dapat dibangun ulang.
Ringkasan#
- Redis adalah server struktur data dalam memori yang melayani perintah klien secara berurutan dan atomik.
- Setiap key berpasangan dengan nilai yang dapat berupa string, list, set, sorted set, hash, atau stream.
- Redis umum digunakan sebagai cache, penyimpanan session, antrean, dan penghitung di samping basis data utama.
- Kapasitas memori dan tingkat persistensi menjadi batasan yang harus direncanakan sejak awal.
Referensi#
- Get started with Redis Open Source — Redis — Ringkasan resmi kemampuan Redis Open Source beserta pilihan pemasangannya.
- Redis data types — Redis — Penjelasan resmi tipe data bawaan Redis beserta contoh penggunaannya.
- Commands — Redis — Daftar lengkap perintah Redis beserta sintaks dan kompleksitasnya.