Optimalisasi redis

What is it things dude ??..
Jika kita me-refer langsung dari situs nya di redis.io , maka akan dijelaskan seperti berikut :
“..Redis is an open source (BSD licensed), in-memory data structure store, used as database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs and geospatial indexes with radius queries. Redis has built-in replication, Lua scripting, LRU eviction, transactions and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster. ..”

Nah, sekarang kita coba bagaimana redis menangani masalah high availability atau master-slave. Untuk masalah instalasi nya sendiri sangat mudah (thanks to hacksparrow dan antonlogvinenko atas share-nya + muhammad abbas atas tutorialnya).

Saya menggunakan 2 server dimana 1 master (192.168.1.2) dan 1 slave (192.168.1.3) di ubuntu 11.10 oneiric ocelot. Download, instalasi dan configure dengan menggunakan parameter berikut :
[Server 1 dan 2]
~# apt-get install gcc g++ make tcl*
~# wget -c http://redis.googlecode.com/files/redis-2.4.8.tar.gz
~# tar -zxvf redis-2.4.8.tar.gz
~# cd redis-2.4.8
~# make && make install && make test
~# mkdir -p ~/.redis/
~# cp -pa /<path_source_of_redis>/redis.conf ~/.redis/
[Server 1]
Konfigurasi yang saya gunakan kira2 seperti berikut :
redis.conf

 

 

 

 

 

 

 

 

 

 

 

 

 

Untuk di sisi slave (192.168.1.3) nya sendiri cukup dengan menambahkan parameter berikut pada config nya :
redis-slave Jika kita ingin memastikan bahwa kondisi awal slave sama dengan master, cukup dengan mematikan sementara service redis pada master kemudian salin file db dump.rdb ke slave (jangan lupa menggunakan parameter save atau bgsave agar dari memori ditulis ke file dump.rdb). Kita bisa langsung melihat bagaimana master dan slave berkomunikasi.
redis_log

~# redis-server ~/.redis/redis.conf
~# redis-cli  -h 192.168.1.2
Perlu untuk selalu kita ingat bahwa setiap teknologi memiliki kelebihan dan kekurangan. Untuk case yang satu ini, kita bisa menggunakan plugin phpredis dibandingkan predis. Namun menurut salah satu rekam jejak forum yang saya ikuti, phpredis mengalami keterbatasan dalam masalah handling session dimana akan di set kosong saat request dikembalikan ke client (meski dalam kasus ini sudah tersedia patch nya). Kemudian kelebihan yang dimiliki oleh predis karena ditulis dalam bahasa C.
Baik, kembali lagi ke topik.. kita sudah bisa menggunakan beberapa parameter built-in redis seperti info, monitor, dbsize, set <name_of_key> <value>, append <name_of_key> ‘<value>’, flush, select <no_of_db>, lpush, hmset, hget, hmget, save, bgsave, dan lainnya dapat  dilihat langsung pada redis.io .

Nah, kita coba lihat kecepatan query redis menggunakan konfigurasi aslinya dan mengambil data di localhost. Sepuluh ribu (10,000) row kita akan coba tampilkan beserta lama waktu penyelesaiannya dalam microsecond.
[Redis, code with result]
redis_code2Berikut lama waktu ketika kita mencoba me-select atau get pada data ke 4004 :

redis_code3Sedikit catatan :
– Apabila kita menggunakan predis, jangan lupa me-generate terlebih dahulu requirement predis dengan membuat berkas composer.json (lakukan instalasi composer baik jika kita menggunakan UNIX/ Linux ataupun Windows). Layaknya Yii framework lewat metode otomatis dalam me-generate ‘CRUD’nya, composer juga akan menciptakan beberapa berkas seperti ‘vendor/’, ‘vendor/autoload.php’, composer.lock, dll.  Eksekusi \> composer install
composer
Gunakan code berikut pada berkas composer.json :

{
  "require": {
      "predis/predis": "v0.8.5"
  }
}

– Gunakan SELECT <number_of_DB> kemudian FLUSHALL untuk hapus semua DB beserta isinya atau FLUSHDB untuk hapus db beserta isi hanya pada lokasi aktif atau present working directory.
– Gunakan parameter HMSET untuk handle multiple key yang ingin kita insert ke hash.
redis 127.0.0.1:6379> HMSET tupleHary:hary name “Hary” address “Bekasi” hobby “Swimming”
– Gunakan code berikut untuk mengisi Records (records ini layaknya table yang akan kita isi atau define field dan value-nya).
redis_code4
redis_DM
– Gunakan perintah SADD untuk mengelompokkan key dan  SMEMBERS untuk melihat key mana saja yang masuk kedalam kelompok yang telah kita define sebelumnya (dalam hal ini Ids) serta HGETALL untuk melihat seluruh value di field pada key.
redis_code5
– Kita bisa lihat berapa lama waktu eksekusi mengambil data ke-1234 dari 20.000 row
redis_code6
– Kita lihat berapa lama waktu perbandingan dengan MySQL dengan banyaknya data seperti diatas. Silahkan lakukan percobaan dg membuat table bernama tupleHary dan sisipkan data sebanyak 20.000 row dan struktur field beserta value seperti diatas,  gunakan php code as below
testing_codetesting

Salam
Hary

Advertisements

Tinggalkan pesan atau komentar

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s