Backend

Redis Caching Strategies: Optimasi Performa Aplikasi Web

2026-06-02T12:19:36.000Z
4 MIN_READ
EverDev Team

Database query yang lambat adalah bottleneck paling umum di aplikasi web. Redis solve masalah ini dengan menyimpan data yang sering diakses di memory, bukan di disk. Hasilnya: response time dari ratusan milidetik jadi kurang dari 1 milidetik.

Apa Itu Redis?

Redis (Remote Dictionary Server) adalah in-memory data store yang berfungsi sebagai cache, database, dan message broker. Data disimpan di RAM, jadi aksesnya sangat cepat. Redis mendukung berbagai data structure: string, hash, list, set, sorted set, dan stream.

Caching Strategies

1. Cache-Aside (Lazy Loading)

Strategy paling umum. Aplikasi cek cache dulu, kalau miss baru query database dan simpan hasilnya di cache.

async function getUser(id) {
  // 1. Cek cache
  const cached = await redis.get(`user:${id}`);
  if (cached) return JSON.parse(cached);
  
  // 2. Cache miss - query database
  const user = await db.query('SELECT * FROM users WHERE id = ?', [id]);
  
  // 3. Simpan di cache (TTL 1 jam)
  await redis.setex(`user:${id}`, 3600, JSON.stringify(user));
  
  return user;
}

Kapan pakai: Data yang sering dibaca tapi jarang diubah (user profile, product catalog).

2. Write-Through

Setiap kali data ditulis ke database, langsung tulis juga ke cache. Cache selalu up-to-date.

async function updateUser(id, data) {
  // 1. Tulis ke database
  await db.query('UPDATE users SET ? WHERE id = ?', [data, id]);
  
  // 2. Update cache
  await redis.setex(`user:${id}`, 3600, JSON.stringify({ id, ...data }));
}

Kapan pakai: Data yang sering dibaca DAN sering diubah, tapi konsistensi kritis.

3. Write-Behind (Write-Back)

Tulis ke cache dulu, lalu async tulis ke database. Lebih cepat, tapi ada risiko data loss kalau cache crash sebelum data sampai ke database.

Kapan pakai: High-write workload yang bisa toleransi sedikit data loss (analytics, logging).

Cache Invalidation

Ini adalah bagian paling tricky dari caching. Kapan data di cache harus dihapus atau diupdate?

  • TTL (Time To Live): Set expiry time. Data otomatis hilang setelah waktu tertentu
  • Event-based: Hapus cache saat data di-update (pub/sub pattern)
  • Version-based: Tambahkan version number di cache key. Update version saat data berubah

Redis Patterns yang Umum

Rate Limiting

async function isRateLimited(ip) {
  const key = `rate:${ip}`;
  const count = await redis.incr(key);
  if (count === 1) await redis.expire(key, 60); // 1 minute window
  return count > 100; // max 100 requests per minute
}

Session Store

async function createSession(userId) {
  const sessionId = crypto.randomUUID();
  await redis.setex(`session:${sessionId}`, 86400, userId); // 24h
  return sessionId;
}

Kesimpulan

Redis caching adalah optimasi performa yang paling impactful untuk kebanyakan aplikasi web. Mulai dari cache-aside untuk data yang sering dibaca, tambahkan TTL untuk expiry, dan iterate sesuai kebutuhan. Satu perubahan kecil bisa bikin response time 10-100x lebih cepat.

Mau belajar backend optimization? Kunjungi everdev.pro.

/// COLLABORATION_ESTABLISH

READY_TO_ARCHITECT_FUTURE?

CONNECT_TO_CORE

EverDev Team

ARCHITECT_CORE

EverDev Team

SYSTEMS_COMM
NODE_SHARE
SYSTEMS_BLOG_V4