Strategi Caching
Pola-pola umum dalam mengimplementasikan cache di aplikasi
Cache-Aside (Lazy Loading)
- Aplikasi memeriksa cache terlebih dahulu
- Jika cache miss, aplikasi mengambil dari database dan menyimpan ke cache
- Data di-cache hanya saat pertama kali diminta
Alur Cache-Aside
- Aplikasi minta data ke cache
- Jika cache hit, kembalikan data
- Jika cache miss, ambil dari database
- Simpan data ke cache
- Kembalikan data ke client
Kelebihan
- Cache hanya menyimpan data yang benar-benar diperlukan
- Tidak ada overhead mengisi cache saat startup
Kekurangan
- Cache miss memperlambat response karena harus ke database
- Data baru pertama kali diakses selalu lambat
Read-Through
- Aplikasi selalu membaca dari cache
- Cache yang bertanggung jawab mengambil dari database saat miss
- Aplikasi tidak pernah berinteraksi langsung dengan database untuk read
Kelebihan
- Logika cache terpusat, aplikasi lebih sederhana
- Konsistensi pola read di seluruh aplikasi
Kekurangan
- Cache harus mendukung read-through logic
- Kurang fleksibel jika perlu query khusus
Write-Through
- Data ditulis ke cache dan database secara bersamaan
- Setiap write selalu menyimpan ke kedua tempat
Kelebihan
- Cache selalu terupdate, tidak ada stale data
- Read selalu cepat karena cache selalu up-to-date
Kekurangan
- Write lebih lambat karena harus ke dua tempat
- Data yang jarang dibaca tetap disimpan di cache
Write-Behind (Write-Back)
- Data ditulis ke cache terlebih dahulu
- Cache menyinkronkan ke database secara asynchronous
- Write ke database bisa di-delay atau di-batch
Kelebihan
- Write sangat cepat karena hanya ke cache
- Bisa batch write untuk mengurangi beban database
Kekurangan
- Risiko kehilangan data jika cache gagal sebelum sinkronisasi
- Kompleksitas lebih tinggi untuk menangani failure
Refresh-Ahead
- Cache memprediksi data yang akan dibutuhkan dan mengisinya sebelumnya
- Data di-refresh sebelum expired
Kelebihan
- Cache miss berkurang karena data sudah disiapkan
- Response lebih konsisten
Kekurangan
- Prediksi tidak selalu benar, bisa membuang resource
- Lebih kompleks untuk diimplementasikan
Kapan Menggunakan Strategi Mana
Cache-Aside
- Aplikasi dengan read-heavy workload
- Tidak tahu data mana yang akan populer
- Redis atau in-memory cache dengan aplikasi yang mengontrol
Write-Through
- Data yang harus selalu up-to-date dan sering dibaca
- Sistem yang tidak toleran terhadap stale data
Write-Behind
- Write-heavy workload dengan toleransi delay
- Logging atau analytics yang bisa ditunda
Refresh-Ahead
- Data dengan pola akses yang bisa diprediksi
- Dashboard dengan data yang di-refresh berkala