Cache Layer untuk Backend API: Redis vs DB Query

Cache Layer untuk Backend API: Redis vs DB Query
Cache Layer untuk Backend API: Redis vs DB Query

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?

SkenarioRedisDB 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)

SkenarioQuery DB LangsungDengan Redis Cache
Waktu respons rata-rata200–400 ms5–50 ms
Beban pada databaseTinggiRendah
Ketersediaan data real-timeSelalu terbaruBisa sedikit delay
SkalabilitasTerbatasLebih 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.

Comments

No comments yet. Why don’t you start the discussion?

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *