REmote DIrectory Server
( R E D I S )
TUGAS RESUME
Oleh :
1210652030 Hendra Dwi Saputra
PROGRAM STUDI TEKNIK INFORMATIKA
FAKULTAS TEKNIK
UNIVERSITAS MUHAMMADIYAH JEMBER
2 0 1 5
REmote DIctionary Server
(REDIS)
Apa itu REDIS?
REDIS adalah penyimpan nilai kunci sementara dan permanen berbasis open source dengan lisensi BSD. Hal ini sering disebut sebagai server struktur data dapat berisi string,
hash, list, set, sorted set, bitmap dan hyperlog. Anda dapat menjalankan operasi atomik pada
tipe data ini, seperti menambahkan string; menambahkan nilai dalam hash; memasukkan sebuah elemen ke dalam list; komputasi pesimpangan, himpunan dan perbedaan set; atau mendapatkan anggota yang memiliki ranking tertinggi di sebuah sorted set.
Untuk mendapatkan kinerja yang luar biasa, Redis bekerja dengan sebuah dataset di dalam memori. Tergantung dari penggunaan anda, anda dapat mempertahankannya dengan membuang dataset ke media penyimpanan sekali-kali, atau dengan menambahkan ke sebuah catatan. Ketahanan ini dapat secara opsional dinonaktifkan, jika anda hanya membutuhkan kaya-fitur, jaringan, dalam cache memori. Redis juga mendukung pengaturan biasa replikasi ansinkronus master-slave, dengan sinkronisasi pertama tanpa-terhenti yang sangat cepat, otomatis-koneksi-ulang dengan pembagian sinkronisasi-ulang dengan jaringan terpisah. Fitur-fitur yang lain adalah :
Transaksi
Pub/Sub
Skrip Lua
Kunci dengan waktu terbatas
LRU eviction of keys
Automatic failover
Anda dapat menggunakan Redis dari bahasa pemrograman umum di dunia. Redis ditulis dengan ANSI-C dan dapat bekerja di sistem POSIX umum seperti Linux, UNIX, BSD, OSX tanpa dependensi eksternal.
PUB/SUB
SUBSCRIBE, UNSUBSCRIBE dan PUBLISH mengimplementasikan paradigma pengiriman pesan secara PUBLISH/SUBSCRIBE (publikasi/langganan) yang mana pengirim (publishers) diprogram untuk tidak mengirim pesannya ke penerima tertentu (subscribers). Tetapi, pesan-pesan yang dipublikasikan ditandai ke dalam saluran-saluran, tanpa mengetahui apabila penerima ada (menerima) atau tidaknya. Penerima menyatakan keinginan pada satu atau beberapa saluran, dan hanya menerima pesan-pesan yang diinginkan, tanpa mengetahui apabila pengirim ada (mengirim) atau tidaknya. Ketidakterikatan antara pengirim dan penerima dapat memberikan skalabilitas dan topologi jaringan yang lebih dinamis. Misalnya untuk berlangganan saluran “musik” dan “film” klien menerbitkan sebuah SUBSCRIBE menetapkan nama dari saluran :
SUBSCRIBE musik film
Pesan-pesan disampaikan oleh klien yang lain ke saluran-saluran ini yang akan diedarkan oleh Redis ke semua klien yang berlangganan. Sebuah klien yang berlangganan ke satu atau beberapa saluran tidak perlu menerbitkan perintah, meskipun dia dapat berlangganan dan berhenti berlangganan ke dan dari saluran-saluran yang lain. Balasan dari operasi SUBSCRIBE dan UNSUBSCRIBE dikirimkan dalam bentuk pesan, sehingga klien dapat membaca sebuah aliran pesan yang cocok yang mana element pertama mengindikasikan tipe dari pesannya.
Format Pesan
Sebuah pesan adalah balasan berbentuk array (susunan) dengan tiga elemen. Elemen yang pertama merupakan bentuk dari pesan :
subscribe : berarti kita telah berhasil berlangganan ke saluran yang diberikan sesuai dengan elemen kedua pada balasan. Elemen ketiga menyatakan jumlah saluran kita berlangganan.
unsubscribe : berarti kita telah berhasil berhenti berlangganan dari saluran yang diberikan sesuai dengan elemen kedua pada balasan. Ketika elemen terakhir adalah kosong, maka kita tidak lagi berlangganan ke saluran apapun, dan klien dapat menerbitkan apapun perintah Redis ketika kita berada di luar tahap Pub/Sub.
message : itu adalah pesan yang diterima dari sebuah perintah PUBLISH yang diterbitkan oleh klien lain. Elemen kedua adalah nama dari saluran berasal, dan elemen ketiga adalah muatan pesan sesungguhnya.
Basisdata & Pengujian
Pub/Sub tidak ada hubungannya dengan ruang kunci. Itu dibuat untuk tidak mengganggunya di level manapun, termasuk jumlah basisdata. Menerbitkan di basisdata 10, akan diterima oleh pelanggan pada basisdata 1. Jika ingin menguji beberapa macam, beri awalan pada saluran dengan nama dari lingkungannya (test, staging, production, ....).
Contoh Protokol Koneksi
SUBSCRIBE pertama kedua *3 $9 subscribe $5 pertama :1 *3 $9 Subscribe $6 Second :2
Pada titik ini, dari klien yang lain kita menerbitkan operasi PUBLISH pada saluran dengan nama kedua :
PUBLISH kedua Hello
Ini adalah yang diterima oleh klien pertama : *3
$7
$6 Kedua $5 Hello
Sekarang klien berhenti berlangganan dari seluruh saluran melalui perintah UNSUBSCRIBE tanpa argumen tambahan :
UNSUBSCRIBE *3 $11 unsubscribe $6 kedua :1 *3 $11 unsubscribe $5 pertama :0 Langganan Pencocokan-Pola
Implementasi Redis Pub/Sub mendukung pencocokan pola. Klien-klien dapat berlangganan pola ragam glob untuk menerima semua pesan yang terkirim ke saluran dengan nama yang cocok dengan pola yang diberikan. Sebagai contoh :
PSUBSCRIBE news.*
Akan menerima semua pesan terkirim ke saluran news.art.figurative, news.music.jazz, dan lain-lain. Semua pola ragam glob adalah valid, jadi beberapa wildcard sekaligus juga didukung.
Akan memberhentikan langganan dari sebuah klien dari pola tersebut. Tidak ada pelanggan lain yang terpengaruh dari panggilan ini. Pesan diterima sebagai hasil dari pencocokan pola dikirimkan dengan format yang berbeda :
Tipe pesan dari pmessage : itu adalah sebuah pesan yang diterima sebagai hasil dari sebuah terbitan perintah PUBLISH oleh klien yang lain, mencocokkan sebuah langganan pencocokan pola. Elemen kedua adalah pola yang cocok sebenarnya, elemen ketiga adalah nama dari saluran berasal, dan elemen terakhir adalah muatan pesan aktual.
Mirip dengan SUBSCRIBE dan UNSUBSCRIBE, perintah PSUBSCRIBE dan PUNSUBSCRIBE diketahui oleh sistem mengirim sebuah pesan dari tipe psubscribe dan punsubscribe menggunakan format yang sama dengan format pesan subscribe dan unsubscribe.
Pencocokan pesan dengan langganan sebuah saluran atau pola
Sebuah klien dapat menerima sebuah pesan tunggal berkali-kali jika langganannya ke beberapa pola dicocokkan dengan pesan yang dipublikasikan, atau jika dia berlangganan pada kedua pola dan saluran yang cocok dengan pesan. Seperti contoh dibawah ini :
SUBSCRIBE foo PSUBSCRIBE f*
Pada contoh di atas, jika sebuah pesan dikirimkan ke saluran foo, maka klien akan menerima dua pesan : satu tipe message dan satu tipe pmessage.
Arti dari penghitungan langganan dengan pencocokan pola
Pada tipe pesan subscribe, unsubscribe, psubscribe dan punsubscibe, argumen terakhir adalah perhitungan pelanggan yang terus aktif. Jumlah ini adalah total angka sebenarnya dari saluran dan pola dimana klien tetap berlanggan. Jadi klien akan keluar dari tahap Pub/Sub ketika penghitungan ini menjadi nol akibat dari berhentinya berlangganan dari semua saluran dan pola.
Petunjuk implementasi pustaka klien
Karena semua pesan diterima berisi langganan nyata menyebabkan pustaka pengiriman pesan (saluran di dalam tipe message, dan pola nyata di tipe pmessage) klien memungkinkan mengikat langganan nyata untuk callback (hal ini dapat berupa fungsi anonimus, blok, pointer fungsi), menggunakan sebuah tabel hash. Ketika pesan diterima sebuah pencarian O(1) dapat diselesaikan untuk mengantarkan pesan ke callback terdaftar.
INSTALASI dan KONFIGURASI
REDIS di Gentoo Linux
1. Instalasi Redis di Gentoo Linux
# emerge -p dev-db/redis
2. Konfigurasi Redis di Gentoo Linux
# eselect rc add redis # eselect rc start redis
PERCOBAAN PUB/SUB
MENGGUNAKAN REDIS
1. Percobaan ini akan mengimplementasikan dasar-dasar Pub/Sub pada Redis, dengan membuat 3 (tiga) saluran yaitu musik, video dan berita dengan 2 (dua) klien yang masing-masing klien pertama berlangganan saluran musik dan berita, sedangkan klien kedua berlangganan saluran video dan berita. Untuk berlangganan menggunakan perintah SUBSCRIBE.
Klien Pertama Klien Kedua
SUBSCRIBE musik berita SUBSCRIBE video berita
2. Jika kita menerbitkan pesan dengan menggunakan perintah PUBLISH, maka klien akan menerima pesan sesuai dengan saluran dimana mereka berlangganan. Sebagai contoh pertama kita akan mengirimkan pesan ke saluran musik.
PUBLISH musik “Meghan Trainor - All About That Bass”
Klien Pertama Klien Kedua
Dalam contoh ini, hanya klien pertama yang mendapatkan pesan karena hanya dia yang berlangganan saluran musik, sedangkan klien kedua tidak mendapatkan pesan.
3. Kemudian kita menerbitkan pesan untuk saluran video, maka klien kedua yang berlangganan saluran video saja yang menerima pesan. Sedangkan klien pertama tidak menerima pesan karena tidak berlangganan saluran tersebut.
PUBLISH video “Avengers 2 - Age of Ultron”
Klien Pertama Klien Kedua
4. Yang terakhir adalah ketika diterbitkan sebuah pesan ke saluran berita dimana kedua klien tersebut berlangganan saluran berita akan menerima pesan yang diterbitkan.
PUBLISH berita “Uang Muka Mobil Pejabat Naik”