Performa API sangat dipengaruhi oleh seberapa cepat backend merespons permintaan. Salah satu teknik paling efektif untuk meningkatkan kecepatan adalah dengan menggunakan cache layer. Di antara berbagai solusi caching, dua pendekatan yang sering dibandingkan adalah menggunakan Redis sebagai cache eksternal atau mengandalkan query langsung ke database (DB Query) dengan optimasi tertentu. Keduanya memiliki kelebihan dan kekurangan tergantung pada skenario penggunaannya.
Mengapa Cache Layer Penting?
Tanpa cache, setiap permintaan API akan memicu query ke database utama. Ini bisa menjadi beban berat, terutama jika data yang diminta sering diakses dan tidak sering berubah. Dengan caching, data bisa disimpan sementara di memori, sehingga respons API bisa diberikan dalam hitungan milidetik.
Redis sebagai Cache Layer
Redis adalah penyimpanan data in-memory yang sangat cepat. Ia mendukung struktur data seperti string, hash, list, set, dan banyak lagi. Redis sering digunakan sebagai cache karena dua alasan utama: kecepatan dan skalabilitas.
Kelebihan Redis:
- Performa tinggi: Akses data sangat cepat karena semuanya disimpan di RAM.
- Skalabilitas: Cocok untuk aplikasi berskala besar dengan beban trafik tinggi.
- TTL (Time to Live): Data bisa otomatis dihapus setelah periode tertentu.
- Dekoupling: Redis terpisah dari database utama, sehingga beban bisa dibagi
Kekurangan Redis:
- Tambahan kompleksitas: Perlu infrastruktur dan pengelolaan terpisah.
- Biaya: Menggunakan Redis (terutama versi cloud) bisa menambah biaya operasional.
- Konsistensi: Ada potensi inkonsistensi data jika cache tidak disinkronkan dengan baik.
DB Query sebagai “Cache” Ringan
Beberapa developer memilih mengoptimalkan query SQL langsung untuk menggantikan cache layer, terutama dalam sistem kecil hingga menengah.
Kelebihan DB Query:
- Sederhana: Tidak perlu komponen tambahan, cukup optimasi di database.
- Konsistensi data: Selalu mengambil data terkini langsung dari sumber.
- Efisien untuk data dinamis: Cocok jika datanya sering berubah dan caching malah jadi hambatan.
Kekurangan DB Query:
- Performa terbatas: Jika tidak dioptimalkan dengan baik, query bisa lambat.
- Beban tinggi: Semua permintaan dibebankan ke database.
- Tidak cocok untuk skala besar: Bottleneck lebih cepat muncul saat trafik naik.
Kapan Memilih Redis, Kapan Cukup dengan DB Query?
Skenario | Redis | DB Query |
---|---|---|
Trafik tinggi, data sering diakses | ✅ Sangat cocok | ❌ Kurang ideal |
Data berubah setiap saat | ❌ Perlu strategi | ✅ Lebih aman |
Aplikasi kecil/menengah | ❌ Tambahan beban | ✅ Efisien |
Butuh waktu respons sangat cepat | ✅ Unggul | ❌ Lebih lambat |
Infrastruktur sederhana | ❌ Lebih kompleks | ✅ Lebih ringan |
Contoh Implementasi Redis Caching di Express.js
Misalnya kita punya endpoint yang mengambil data produk dari database:
1. Tanpa Redis (langsung query database)
app.get('/api/products/:id', async (req, res) => {
const product = await db.query('SELECT * FROM products WHERE id = $1', [req.params.id]);
res.json(product.rows[0]);
});
Ini akan memanggil database setiap kali endpoint diakses, tanpa pengecekan apakah data sudah tersedia.
2. Dengan Redis Caching
const redis = require('redis');
const client = redis.createClient();
app.get('/api/products/:id', async (req, res) => {
const { id } = req.params;
// Cek cache
client.get(`product:${id}`, async (err, cachedData) => {
if (cachedData) {
return res.json(JSON.parse(cachedData));
}
// Jika tidak ada di cache, ambil dari DB
const product = await db.query('SELECT * FROM products WHERE id = $1', [id]);
// Simpan ke Redis dengan TTL 60 detik
client.setex(`product:${id}`, 60, JSON.stringify(product.rows[0]));
res.json(product.rows[0]);
});
});
Penjelasan:
client.get
: Mengecek apakah data sudah tersedia di Redis.client.setex
: Menyimpan data di cache dengan TTL (Time To Live).- Jika data sudah tersedia di Redis, maka database tidak perlu diakses lagi.
Perbandingan Performa (Ilustrasi Sederhana)
Skenario | Query DB Langsung | Dengan Redis Cache |
---|---|---|
Waktu respons rata-rata | 200–400 ms | 5–50 ms |
Beban pada database | Tinggi | Rendah |
Ketersediaan data real-time | Selalu terbaru | Bisa sedikit delay |
Skalabilitas | Terbatas | Lebih fleksibel |
Catatan: Angka-angka di atas adalah ilustrasi rata-rata. Performa sebenarnya tergantung pada arsitektur, beban trafik, dan optimasi sistem.
Kesimpulan
Cache layer adalah alat penting untuk meningkatkan performa backend API. Redis menawarkan kecepatan tinggi dan kontrol fleksibel, cocok untuk aplikasi besar dengan kebutuhan respons cepat. Namun, tidak semua sistem perlu Redis. Jika skalanya masih kecil atau data terlalu dinamis, optimasi query database bisa menjadi pilihan yang lebih efisien dan praktis.