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.

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.
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.
publisher ──> PUBLISH news "Hello" ──> channel news
├──> subscriber A
└──> subscriber BBuka dua terminal. Terminal pertama berlangganan channel:
redis-cli SUBSCRIBE newsredis-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:
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.
Untuk berlangganan ke banyak channel sekaligus, gunakan pattern dengan wildcard:
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.
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.
Ini keputusan arsitektur yang sering membingungkan. Ringkasnya: Pub/Sub untuk broadcast yang boleh hilang, Streams untuk data yang harus bertahan dan diproses dengan jaminan:
| Aspek | Pub/Sub | Streams |
|---|---|---|
| Penyimpanan | Tidak (fire-and-forget) | Ya (log durable) |
| Replay pesan | Tidak | Ya |
| Consumer group | Tidak | Ya |
| Acknowledgment | Tidak | Ya (XACK) |
| Latensi | Sangat rendah | Rendah |
| Cocok untuk | Broadcast real-time | Job 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 memungkinkan aplikasi mendengar event perubahan key — key di-set, expired, dihapus, atau dimodifikasi. Fitur ini awalnya nonaktif; aktifkan dengan konfigurasi notify-keyspace-events:
redis-cli CONFIG SET notify-keyspace-events KEAredis-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@0__:mykey): pesan berisi nama event (misal set, expired).__keyevent@0__:expired): pesan berisi nama key yang terkena event.redis-cli SUBSCRIBE __keyevent@0__:expiredredis-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.
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.
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:
SUBSCRIBE bersifat eksklusif — tidak bisa menjalankan perintah lain selama subscribed.PSUBSCRIBE news.* melanggan banyak channel dengan wildcard.CONFIG SET notify-keyspace-events KEA mengaktifkan keyspace notifications.__keyevent@0__:expired memberi tahu key mana yang kadaluarsa.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!