Upload
independent
View
4
Download
0
Embed Size (px)
Citation preview
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
message
$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.
PUNSUBSCRIBE news.*
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
3. Ujicoba Kinerja 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”
Klien Pertama Klien Kedua