Published on

Redis dengan Stream, Pub/Sub dan Lists

Authors

Overview Redis

Redis yang pada umumnya digunakan sebagai memory-data store, mekanisme caching, rate limitting, dsb. namun sebenarnya redis memiliki fungsi dan feature yang juga dapat ditemukan di message broker seperti RabbitMQ dan Kafka. Redis memang sudah didukung dengan fitur Streams, Pub/Sub, dan Lists. untuk referensi dapat dilihat disini. Messaging system erat kaitannya dengan konsep asynchronous yang pertukaran antara pengirim dan penerima pesan dilakukan tanpa perlu menunggu response secara langsung. model ini memisahkan interaksi sehingga dapat berjalan secara independen. implementasi konsep async memiliki banyak keuntungan:

  1. melepas ketergantungan antar component / module /service.
  2. scaling dapat dilakukan secara independen sesuai kebutuhan dari service.
  3. menghindari perfomance bottleneck karena servicenya dipisah tak menggangu tasks dan background process dari service utama.
  4. scalability lebih baik.
  5. kegagalan satu service tidak berdampak ke service atau sistem keseluruhan.

intinya semua asynchronous messaging memudahkan skalabilitas melalui parallel processing, load balancing, fault tolerance, dan independen scaling.

coba kita bahas lebih detail 3 sistem utama redis yaitu Lists, Pub/Sub, dan Streams

1. Lists

Redis list adalah sebuah data structure serba guna karena dibangun atas data structure linked list yang memudahkan proses penyimpanan dan perubahan data secara efektif. Redis memiliki operasi cukup lengkap, berikut:

  • LPUSH: Memasukan satu atau lebih elemen di awal list. perintah ini dapat membuat list baru atau menambahkan elemen kedalam list yang sudah ada.
  • RPUSH: Memasukan satu atau lebih elemen di akhir list. sama seperti LPUSH cuman ini dari akhir.
  • LPOP: Mengeluarkan atau menghapus elemen awal dari list. menggunakan konsep queue yaitu FIFO.
  • RPOP: Mengularkan atau menghapus elemen akhir dari list. menggunakan konsep stack yaitu LIFO.
  • LLEN: Menghitung panjang list.
  • LRANGE: Mengembalikan range elem dari list berdasarkan index mereka.
  • LINDEX: Mengembalikan element pada index spesifik didalam list.
  • LINSERT: Memasukan elemen secara spesifik kedalam list.

2. Pub/Sub

Redis Pub/Sub (Publish/Subscribe) adalah sebuah messaging pattern yang memfasilitasi broadcasting pesan ke multiple subscriber. Pada model ini, redis client dapat bertindak sebagai publisher yang mengirim pesan ke channel dan subscriber yang memperoleh pesan dari channel. Channel memiliki bentuk dasar string sebagai identifikasi saluran komunikasi. Ketika publisher mempublish sebuah pesan ke channel, redis mengirimkan ke semua subcriber yang terkoneksi pada channel tersebut. subcriber dapat mengikuti multiple channel, sehingga dapat menerima pesan secara konkuren dari berbagai sumber. Meskipun Redis Pub/Sub menyediakan message bus dengan performa tinggi, itu tidak persistant seperti di kafka atau rabbitmq, artinya pesan tidak disimpan untuk konsumsi offline/server restart maka data akan hilang.

Berikut perintah untuk redis Pub/Sub:

  • PUBLISH: Mengirim pesan ke channel spesifik.
  • SUBSCRIBE: Mengijinkan client untuk mengikut 1 atau lebih channel.
  • UNSUBSCRIBE:Mengijinkan client untuk berhenti mengikuti specific channel.
  • PSUBSCRIBE: Mengijinkan client untuk subcribe ke channel menggunakan pencocokan pola.
  • PUNSUBSCRIBE: Unsubscribes clients dari channel PSUBSCRIBE.
  • PUBSUB: Menyediakan informasi tentang sistem Pub/Sub didalam redis.

3. Streams

Redis Streams adalah sebuah data struktur canggih yang di design untuk kebutuhan handle high-volume data, realtime data stream. Stream menawarkan cara untuk memodelkan dan memproses alur data secara fault-tolerant dan scalable. Setiap entri dalam steam memeiliki uniqueID dan terdiri dari pasangan key dan value, sehingga secara inklusi dapat menambahkan metadata dengan message payload.

Berikut contoh peritah dari Redis Stream:

  • XADD: Menambahkan entry baru ke dalam stream.
  • XLEN: Mengembalikan nilai total dari entri ke dalam stream.
  • XREAD: Consumer dapat membaca entri dari stram 1 atau lebih.
  • XGROUP: Memanage kelompok consumer didalam stream.
  • XREADGROUP: Mirip seperti XREAD, tapi didesain untuk kelompok konsumer.
  • XACK: Melakukan Acknowledges untuk entry yang berhasil diproses oleh konsumer.
  • XDEL: menghapus 1 atau lebih entri dari stream berdasarkan IDnya.

Dengan memahain dan utilisasi redis data structure dan perintahnya, kita secara efektif dapat mengimplementasi konsep messaging secara scalable.