Belajar Redis - Pub/Sub Messaging & Keyspace Notifications
Episode 8 of 21

Belajar Redis - Pub/Sub Messaging & Keyspace Notifications

Episode ini membahas mekanisme broadcast real-time Redis: Pub/Sub dengan SUBSCRIBE dan PUBLISH, pattern-based subscription, perbedaan fundamental Pub/Sub versus Streams, serta keyspace notifications untuk mendengar perubahan key secara real-time.

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

Pendahuluan

Sejauh ini kalian selalu menarik data dari Redis secara pull. Episode 8 mengubah arah: kalian akan belajar bagaimana Redis mendorong data ke aplikasi secara real-time melalui Pub/Sub, plus fitur keyspace notifications yang membuat aplikasi bisa mendengar perubahan key.

Pub/Sub adalah mekanisme broadcast paling sederhana di Redis — publisher mengirim pesan ke channel, semua subscriber yang mendengarkan langsung menerimanya. Ini pola dasar untuk notifikasi real-time seperti chat, WebSocket broadcast, dan alerting. Mari kita mulai.

Publish/Subscribe

Model Fire-and-Forget

Pub/Sub bekerja dengan model sederhana: pesan dikirim ke channel, dan semua client yang sedang subscribe ke channel itu menerimanya secara instan. Tidak ada penyimpanan — jika tidak ada subscriber saat pesan dikirim, pesan hilang selamanya.

Alur Pub/Sub
publisher ──> PUBLISH news "Hello" ──> channel news
                                        ├──> subscriber A
                                        └──> subscriber B

SUBSCRIBE dan PUBLISH

Buka dua terminal. Terminal pertama berlangganan channel:

Subscribe ke channel
redis-cli SUBSCRIBE news

redis-cli SUBSCRIBE news membuat terminal terhubung ke channel news. Mode subscribe bersifat eksklusif: selama subscribed, client tidak bisa menjalankan perintah lain. Di terminal kedua, kirim pesan:

Publish pesan ke channel
redis-cli PUBLISH news "Selamat pagi, tim!"

redis-cli PUBLISH news "Selamat pagi, tim!" membroadcast pesan. Subscriber akan menerima tiga baris respons: tipe message, nama channel, dan isi pesan. Jika tidak ada subscriber, PUBLISH mengembalikan 0 — pesannya hilang, tidak diantrekan.

Pattern-Based Subscription

Untuk berlangganan ke banyak channel sekaligus, gunakan pattern dengan wildcard:

Subscribe dengan pattern
redis-cli PSUBSCRIBE news.*

PSUBSCRIBE news.* membuat subscriber menerima semua channel yang cocok dengan pola — misalnya news.tech, news.sport, news.weather. Ini sangat praktis untuk arsitektur yang membagi channel berdasarkan topik atau region. Gunakan PUNSUBSCRIBE untuk berhenti.

Arsitektur Multi-Consumer

Satu channel bisa melayani banyak subscriber sekaligus — misalnya satu instance Redis, banyak WebSocket gateway yang masing-masing subscribe ke channel notifikasi. Ketika backend mem-publish event, semua gateway menerimanya dan meneruskan ke client. Ini pola inti broadcast real-time di skala besar.

Pub/Sub vs Streams

Kapan Memakai Apa

Ini keputusan arsitektur yang sering membingungkan. Ringkasnya: Pub/Sub untuk broadcast yang boleh hilang, Streams untuk data yang harus bertahan dan diproses dengan jaminan:

AspekPub/SubStreams
PenyimpananTidak (fire-and-forget)Ya (log durable)
Replay pesanTidakYa
Consumer groupTidakYa
AcknowledgmentTidakYa (XACK)
LatensiSangat rendahRendah
Cocok untukBroadcast real-timeJob processing, event sourcing

Info

Aturan praktis: jika sebuah pesan penting dan tidak boleh hilang saat tidak ada konsumen, gunakan Streams. Jika pesan hanya perlu diteruskan ke subscriber yang sedang online saat itu juga, Pub/Sub cukup — dan lebih ringan.

Keyspace Notifications

Mendengar Perubahan Key

Keyspace notifications memungkinkan aplikasi mendengar event perubahan key — key di-set, expired, dihapus, atau dimodifikasi. Fitur ini awalnya nonaktif; aktifkan dengan konfigurasi notify-keyspace-events:

Aktifkan keyspace notifications
redis-cli CONFIG SET notify-keyspace-events KEA

redis-cli CONFIG SET notify-keyspace-events KEA mengaktifkan semua event. String kode dikategorikan: K untuk keyspace events, E untuk keyevent events, A adalah alias untuk g$lshzxe (semua tipe event). Ada dua bentuk notifikasi:

  • Keyspace channel (__keyspace@0__:mykey): pesan berisi nama event (misal set, expired).
  • Keyevent channel (__keyevent@0__:expired): pesan berisi nama key yang terkena event.
Subscribe ke channel keyevent expired
redis-cli SUBSCRIBE __keyevent@0__:expired

redis-cli SUBSCRIBE __keyevent@0__:expired mendengarkan semua key yang expired di database 0. Ketika sebuah key kadaluarsa, aplikasi menerima nama key-nya — pola sempurna untuk membersihkan cache atau state terkait.

Use Case Keyspace Notifications

  • Cache invalidation: aplikasi langsung tahu saat key cache dihapus/diupdate dan bisa men-sync data terkait.
  • Session expiry: saat session expired, aplikasi mencatat aktivitas logout atau membersihkan resource.
  • Scheduled cleanup: event expired menggantikan cron job polling.

Danger

Ada event yang tergantung cara hapus: key yang dihapus karena eviction maxmemory tidak selalu memicu notifikasi, dan event expired hanya muncul saat key benar-benar dihapus (lazy) — bukan saat TTL-nya habis secara konseptual. Untuk keputusan kritis, jangan andalkan notifikasi sebagai satu-satunya mekanisme.

Perhatikan juga: menyalakan terlalu banyak event (KEA) menambah overhead per operasi write. Di produksi, aktifkan hanya event yang benar-benar kalian butuhkan, misalnya KE atau subset tertentu.

Penutup

Episode 8 membekali kalian Pub/Sub untuk broadcast real-time dan keyspace notifications untuk mendengar perubahan key: SUBSCRIBE/PUBLISH, PSUBSCRIBE dengan pattern, perbandingan Pub/Sub vs Streams, serta notify-keyspace-events untuk event expired dan invalidation.

Inti yang harus dibawa pulang:

  • Pub/Sub bersifat fire-and-forget: tanpa subscriber, pesan hilang.
  • SUBSCRIBE bersifat eksklusif — tidak bisa menjalankan perintah lain selama subscribed.
  • PSUBSCRIBE news.* melanggan banyak channel dengan wildcard.
  • Gunakan Streams jika pesan harus durable dan terproses dengan jaminan.
  • CONFIG SET notify-keyspace-events KEA mengaktifkan keyspace notifications.
  • Channel __keyevent@0__:expired memberi tahu key mana yang kadaluarsa.
  • Jangan andalkan notifikasi eviction; aktifkan hanya event yang dibutuhkan.

Di episode 9 selanjutnya kita membahas Transactions (MULTI/EXEC) & Optimistic Locking (WATCH) — cara Redis menjalankan beberapa perintah secara atomik, melindungi data dari race condition dengan WATCH, serta teknik pipelining untuk mengurangi network round-trip. Siapkan terminal kalian!

Belajar Redis - Pub/Sub Messaging & Keyspace Notifications | Belajar Redis