Sitemap

Implementasi Caching Pada Python Flask

Implementasi python cache decorator untuk mempercepat aplikasi web dengan menggunakan framework Flask

--

Press enter or click to view image in full size
Photo by Chris Ried on Unsplash

Sesuai janji saya di postingan sebelumnya , hari ini kita akan mencoba menerapkan sistem cache pada aplikasi web agar performance nya semakin sat-set-sat-set alias super cepat. Kali ini kita akan menggunakan framework Flask (python).

Jika kamu belum tahu apa itu cache maka disarankan untuk membaca dulu postingan ini agar tidak gagal paham, ok ?

Catatan: Praktek kali ini menggunakan OS linux. Jika kamu menggunakan Windows bisa disesuaikan dengan command yang ada di Windows. Atau kamu bisa menggunakan WSL agar command nya sama. Versi python yang digunakan adalah 3.8.7

Kuy langsung saja kita praktek!

Flask Tanpa Cache

  1. Install framework Flask dengan menjalankan command-command berikut:
mkdir myproject
cd myproject
python3 -m venv venv
. venv/bin/activate
pip install Flask

Rangkaian command tersebut akan membuat folder myproject dan virtual environment di dalam nya. Lalu mengaktifkan virtual environment yang baru saja dibuat. Setelah aktif, selanjutnya diinstall framework Flask di dalam environment tersebut.

Catatan: Virtual environment berfungsi untuk mengisolasi environment per project (folder), agar library project tidak tercampur dengan library python yang ada di sistem.

2. Buat file app.py, lalu isi dengan code berikut:

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
return "<p>Hello, World!</p>"

Kode tersebut akan menjalankan aplikasi flask dan membuat endpoint root “/” dengan output teks: <p>Hello, World!</p>

3. Coba run aplikasi nya dengan menjalan command berikut

flask --app app --debug run

Seharusnya muncul:

Press enter or click to view image in full size
flask run

Catatan: command flask run ini adalah fitur server bawaan dari framework Flask yang bertujuan untuk memudahkan proses development. Untuk production, sangat tidak disarankan menggunakan server ini, tapi sebaiknya gunakan web server yang production-ready seperti gunicorn.

4. Lalu coba hit endpoint nya dengan menggunakan program curl , dan rekam timing nya dengan perintah time. Kurang lebih seperti berikut command lengkap nya:

time curl localhost:5000

Maka akan menghasilkan output:

output flask

Hasilnya diproses dalam waktu 0.019second. Sangat cepat (normal).

Get TryzTech’s stories in your inbox

Join Medium for free to get updates from this writer.

5. Kemudian simulasikan proses yang lambat dengan menggunakan function sleep yang terdapat pada library time seperti pada kode di bawah ini:

from time import sleep
from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
sleep(5)
return "<p>Hello, World!</p>"

Kode tersebut akan mem“pause” eksekusi selama 5 detik

Maka hasilnya, aplikasi akan menjadi lambat:

Di hit beberapa kali pun akan tetap lambat:

Sekarang, mari kita pakai jurus caching agar aplikasi nya menjadi lebih sat-set 😀

Flask dengan Cache

  1. Install plugin Flask-Caching
pip install Flask-Caching

2. Pasang decorator @cache.cached() pada function yang akan “dipercepat”

from time import sleep
from flask import Flask
from flask_caching import Cache

config = {
"CACHE_TYPE": "SimpleCache",
"CACHE_DEFAULT_TIMEOUT": 300
}
app = Flask(__name__)
app.config.from_mapping(config)
cache = Cache(app)

@app.route("/")
@cache.cached()
def hello_world():
sleep(5)
return "<p>Hello, World!</p>"

Pada kode tersebut, kita menggunakan SimpleCache. Pada aplikasi production , disarankan untuk menggunakan backend yang lebih powerful & reliable seperti RedisCache.

Catatan: Library Flask-Caching cukup powerful dan support berbagai backend. Kamu bisa mempelajari lebih lanjut mengenai library ini di dokumentasi resminya.

3. Test lagi dengan beberapa kali hit endpoint yang sudah menggunakan decorator cache tadi

flask test cache

Pada hasil test kali ini, terlihat hit pertama output nya 5 detik, tetapi pada hit-hit berikutnya hanya 0.009 detik, dengan output yang sama yaitu <p>Hello, World!</p>

Ini berarti hit pertama saja yang melewati proses sleep(5) , Hit berikutnya, library Flask-Caching akan mengambil dari data yang ada di cache hasil hit pertama tadi. Sesuai mekanisme yang dibahas pada artikel sebelumnya.

Hanya saja karena kita menggunakan library, jadi detail mekanisme nya sudah dibungkus oleh library. Kita tidak perlu mengambil dan menyimpan ke storage cache secara manual.

Kesimpulan

Bagaimana guys? Cukup mudah kan implementasi cache pada python flask ini?

Jika kamu menemukan issue performance pada aplikasi yang kamu buat, teknik caching ini bisa kamu lirik sebagai salah satu alternatif solusi. Dengan catatan, data yang di-cache adalah data yang sering diakses dan tidak sering berubah.

Akhir kata, mudah-mudahan postingan sederhana ini bisa bermanfaat buat pembaca semua khususnya bagi penulis sendiri.

Jangan lupa clap jika kamu suka postingan ini, follow untuk mendapatkan info selanjutnya, dan comment jika ada yang ingin ditanyakan atau sekedar ngobrol. 😊

Keep coding dan sampai jumpa di postingan lainnya!

Wassalam…

--

--

TryzTech
TryzTech

Written by TryzTech

Konten seputar programming, backend, frontend, cloud, DevOps, AI, dan produktivitas untuk software engineer. ~ tryztech.com