Implementasi Server Side Caching dengan Redis — Part III

Redha Juanda
Redha Juanda
Published in
3 min readApr 20, 2020

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 !!!!

--

--