Implementasi Server Side Caching dengan Redis — Part III
Part III — Golang Redis
Sekarang setelah kita tahu keuntungan dalam menggunakan caching, mari kita coba implementasikan dalam sebuah project.
Kita akan membuat sebuah web service / API untuk diakses oleh client. Service yang akan kita buat kita namakan Get Your Pokemon. Yang nanti akan diakses oleh client untuk mendapatkan data detail pokemon. Kita menggunakan pokeapi, silahkan lihat dokumentasinya disini: https://pokeapi.co
Implementasi
Pertama kita mendefinisikan 2 buah handler, yaitu
GET /pokemonwithredis
GET /pokemonwithoutredis
yang akan menerima satu query parameter : pokemon
Berikut cara mendifinisikan handler dengan package http/net
Sekarang mari kita mengimplementasikan handler getPokemonWithoutRedis
seperti berikut:
Disini kita pertama membaca query parameter pokemon
yang dikirim oleh client, lalu melakukan request ke pokeapi.
Sekarang mari kita implementasikan API yang sama dengan menggunakan redis, seperti berikut:
Mari kita bahas satu persatu:
- Di line ke 2, kita membaca query parameter yang dikirim oleh client
- Line ke 4, kita membuat koneksi redis
- Line ke 9, kita mencoba mengambil data pokemon di redis sesuai dengan yang dikirim oleh client. Jika tidak terjadi error berarti data yang diminta tersedia di redis. lalu kita mengirim data tersebut ke client. proses selesai.
- Namun jika terjadi error, berarti data belum tersedia di redis, proses dilanjutkan
- Line ke 16, kita melakukan request ke pokeapi
- Line ke 27, kita menyimpan data yang dikembalikan oleh pokeapi ke redis
- Line ke 32, kita mengirim data tersebut ke client.
Response Time
Sekarang setelah semua selesai, coba jalankan aplikasi kita dengan command go run main.go
dan mari kita hitung response time dari ke 2 handler tersebut
Tanpa Caching
Berikut command curl
untuk memanggil dan menampilkan response time dari api nya:
curl -o /dev/null -w "\n%{time_total} seconds\n" http://localhost:3000/pokemonwithoutredis?pokemon=pikachu
Dan berikut hasil dari saya menjalankan di komputer saya sebanyak 3 kali:
Hasil response time nya lumayan bervariasi, kita bisa mengambil rata-rata response time nya adalah:
(0.501251 + 2.432749 + 1.634401) / 3 = 1.522800 detik
Dengan Caching
Berikut command curl
untuk memanggil dan menampilkan response time dari endpoint pokemonwithredis
:
curl -o /dev/null -w "\n%{time_total} seconds\n" http://localhost:3000/pokemonwithredis?pokemon=pikachu
Dan berikut hasil response time ketika saya menjalankan di komputer saya:
Kita bisa lihat bahwa request pertama memakan waktu 2.36 detik karena saat pertama kali dijalankan data belum tersimpan di redis, jadi server tetap melakukan request ke pokeapi terlebih dahulu. Sedangkan pada request ke 2 dan ke 3 kita bisa melihat response timenya sangat jauuuuuh lebih cepat.
Jika kita hitung rata-ratanya request ke 2 dan ke 3 = 0.0027195 detik.
Dan sekarang kita bisa menghitung ratio nya dengan cara:
rata-rata request tanpa redis / rata-rata request dengan redis
1.522800 : 0.0027195 =559.9 : 1
Artinya dengan menggunakan redis kecepatan akses API kita bisa meningkat sebanyak 560 kali !!!!