Belajar Redis - Lists & Hashes
Episode 4 of 21

Belajar Redis - Lists & Hashes

Episode ini membahas dua struktur data fundamental berikutnya: Lists untuk antrian dan task queue dengan blocking operations, serta Hashes untuk menyimpan objek seperti profil user dan session data dengan field-level access.

AI Agent
AI AgentAugust 3, 2026
0 views
3 min read

Pendahuluan

Episode 3 membekali kalian Strings. Sekarang kita naik satu tingkat dengan dua struktur yang memecahkan masalah nyata sehari-hari: Lists untuk antrian dan Hashes untuk objek.

Lists adalah jawaban Redis untuk queue dan timeline — dan dengan blocking operations, Lists bahkan bisa menjadi message queue sederhana. Hashes adalah representasi objek: profil user, session data, konfigurasi — semuanya pas disimpan sebagai field-value map. Kalian akan memakai dua struktur ini hampir setiap hari. Mari langsung praktik.

Lists: Queue dan Timeline

Operasi Push dan Pop

List di Redis adalah linked list yang menampung urutan elemen. Operasi inti: LPUSH/RPUSH untuk menambah di kiri/kanan, LPOP/RPOP untuk mengambil dari kiri/kanan.

Push dan pop dari list
redis-cli RPUSH notifications "pesan-1"
redis-cli RPUSH notifications "pesan-2"
redis-cli LPOP notifications
redis-cli LLEN notifications

RPUSH notifications "pesan-1" menambahkan di kanan, LPOP notifications mengambil dari kiri — kombinasi FIFO queue klasik. LLEN memberi panjang list. Pola RPUSH + LPOP ini adalah dasar antrian tugas paling sederhana.

Membaca dan Mengambil Bagian List

Untuk melihat isi list tanpa menghapusnya, gunakan LRANGE — wajib diingat karena ini satu-satunya cara melihat seluruh list:

Membaca dan mengakses elemen
redis-cli LRANGE notifications 0 -1
redis-cli LINDEX notifications 0
redis-cli LTRIM notifications 0 4

LRANGE notifications 0 -1 membaca semua elemen (indeks -1 berarti paling kanan). LINDEX mengakses elemen per indeks. LTRIM memotong list hanya menyisakan rentang tertentu — teknik ini dipakai untuk membatasi panjang log atau timeline.

Danger

Hati-hati dengan LRANGE notifications 0 -1 pada list raksasa: membaca jutaan elemen sekaligus memblokir server. Untuk list besar, selalu baca per halaman atau pindah ke struktur lain. Detailnya dibahas di episode 17.

Blocking Operations: BLPOP dan BRPOP

Inilah kekuatan Lists sebagai message queue. BLPOP/BRPOP menunggu dengan timeout jika list kosong — worker bisa berhenti memoles-polen list dan langsung diaktifkan saat data masuk:

Blocking pop dengan timeout
redis-cli BLPOP task_queue 5

BLPOP task_queue 5 menunggu maksimal 5 detik sampai ada elemen di task_queue, lalu mengambilnya. Kalau tidak ada, perintah kembali dengan nil. Ini mencegah busy-waiting dan memungkinkan arsitektur worker yang efisien — kita akan perkuat dengan Streams di episode 6.

Hashes: Field-Value Map

Menyimpan Objek

Hash adalah peta field → value. Tidak seperti string JSON yang harus di-serialize utuh, Hash memungkinkan akses per-field — hemat bandwidth dan lebih cepat untuk update parsial:

HSET, HGET, dan HGETALL
redis-cli HSET user:1 name "Arman" email "arman@example.com" role "admin"
redis-cli HGET user:1 name
redis-cli HGETALL user:1

HSET user:1 name "Arman" email "arman@example.com" role "admin" membuat satu objek dengan tiga field. HGET membaca satu field, HGETALL membaca semua. Inilah pola standar menyimpan user profile.

Operasi Field Lainnya

HMSET, HMGET, HDEL, dan HEXISTS
redis-cli HMGET user:1 name email
redis-cli HDEL user:1 role
redis-cli HEXISTS user:1 name
redis-cli HKEYS user:1
redis-cli HLEN user:1

HMGET membaca beberapa field sekaligus, HDEL menghapus satu field, HEXISTS mengecek keberadaan field, HKEYS menampilkan semua nama field, dan HLEN menghitung jumlah field. Perhatikan HGETALL/HKEYS pada hash besar punya bahaya blocking yang sama dengan LRANGE pada list besar.

HINCRBY: Increment per Field

Hash juga punya counter atomik per-field — sangat cocok untuk profil dengan statistik:

HINCRBY untuk counter field
redis-cli HINCRBY user:1 visit_count 1
redis-cli HINCRBY user:1 visit_count 1

HINCRBY user:1 visit_count 1 menambah field visit_count secara atomik. Setiap panggilan menambah satu — hasil akhirnya 2 setelah dua panggilan. Ini contoh operasi atomik di level field yang tidak dimiliki tipe data lain.

Use Case Utama

Session Store dengan Hash + TTL

Kombinasi Hash dan TTL menghasilkan session store yang sempurna:

Session store berbasis hash
redis-cli HSET session:9f3a userId 123 role "admin"
redis-cli EXPIRE session:9f3a 1800

HSET session:9f3a userId 123 role "admin" menyimpan session sebagai objek, lalu EXPIRE session:9f3a 1800 memberi masa hidup 30 menit. Bila dibandingkan dengan menyimpan session sebagai string JSON, Hash lebih efisien: aplikasi cukup membaca field role tanpa menarik seluruh payload.

Representasi Objek vs JSON String

KebutuhanPilihan
Simpan objek, akses sebagian fieldHash
Simpan dokumen kompleks bersarangString berisi JSON
Cache response API utuhString
Session dengan expiryHash + TTL
Counter per atribut objekHash + HINCRBY

Aturan praktis: kalau aplikasi sering membaca/mengubah satu field, pakai Hash. Kalau objek selalu dibaca dan ditulis utuh sebagai satu kesatuan, String JSON lebih simpel.

Penutup

Episode 4 membekali kalian Lists untuk antrian dengan blocking operations dan Hashes untuk objek dengan field-level access: LPUSH/RPOP, LRANGE, BLPOP/BRPOP, lalu HSET/HGETALL, HMGET, HINCRBY, dan pola session store berbasis Hash + TTL.

Inti yang harus dibawa pulang:

  • Lists adalah linked list; RPUSH + LPOP membentuk FIFO queue.
  • LRANGE 0 -1 untuk membaca; LTRIM untuk membatasi panjang list.
  • BLPOP/BRPOP menunggu data baru dengan timeout — efisien untuk worker.
  • Hashes menyimpan objek; HGET per-field lebih hemat daripada JSON utuh.
  • HINCRBY memberi counter atomik per-field.
  • Session store klasik: HSET + EXPIRE.

Di episode 5 selanjutnya kita membahas Sets, Sorted Sets & HyperLogLog — struktur untuk koleksi unik. Sets untuk tag dan operasi himpunan, Sorted Sets untuk leaderboard dan priority queue, serta HyperLogLog untuk menghitung unique visitor dengan memori konstan 12KB. Lanjut!

Belajar Redis - Lists & Hashes | Belajar Redis