Redis (Remote Dictionary Server) adalah penyimpanan data berbasis memori yang menyimpan data dalam pasangan key-value. Karena data berada di RAM, bukan di disk, proses baca dan tulisnya jauh lebih cepat daripada database biasa.
Redis cache berarti menggunakan Redis sebagai lapisan penyimpanan sementara di depan database utama. Analoginya seperti meja kerja: dokumen yang sering dipakai Anda taruh di atas meja, sedangkan arsip lengkapnya tetap di lemari. Mengambil dari meja jelas lebih cepat daripada bolak-balik ke lemari.
Kenapa Website Perlu Redis Cache?
Ada empat alasan utama memakai Redis cache pada website atau aplikasi.
- Respons lebih cepat. Data yang sering diminta dilayani langsung dari memori, tanpa menunggu database.
- Beban database berkurang. Database hanya dipanggil saat data belum ada di cache, sehingga tidak mudah kewalahan saat trafik naik.
- Pengalaman pengguna lebih baik. Halaman yang cepat membuat pengunjung betah, dan kecepatan juga ikut memengaruhi SEO.
- Biaya infrastruktur lebih hemat. Dengan beban database lebih ringan, Anda bisa menunda upgrade server yang mahal.
Redis cache paling terasa manfaatnya pada data yang sering dibaca tetapi jarang berubah, misalnya daftar produk, kategori, profil pengguna, atau hasil perhitungan yang berat.
Cara Kerja Redis Cache
Alurnya sederhana dan mudah dipahami:
- Aplikasi menerima permintaan data.
- Aplikasi mengecek Redis terlebih dahulu.
- Cache hit: data ada di Redis, langsung dikirim ke pengguna.
- Cache miss: data tidak ada, aplikasi mengambilnya dari database.
- Hasil dari database disimpan ke Redis, lalu dikirim ke pengguna.
Dengan alur ini, hanya permintaan pertama yang “mahal”. Permintaan berikutnya cukup mengambil dari Redis selama datanya belum kedaluwarsa.
3 Strategi Redis Cache yang Umum Dipakai
Memilih strategi yang tepat menentukan seberapa efektif Redis cache bekerja.
1. Cache-Aside (Lazy Loading)
Aplikasi yang mengatur semuanya: cek cache dulu, kalau kosong ambil dari database lalu simpan ke cache. Ini strategi paling populer dan paling mudah diterapkan.
- Kelebihan: sederhana, hanya data yang benar-benar diminta yang disimpan.
- Kekurangan: permintaan pertama selalu lambat, dan data bisa basi bila database berubah.
2. Write-Through
Setiap kali data ditulis, aplikasi menulis ke database dan ke cache sekaligus.
- Kelebihan: cache selalu sinkron dengan database.
- Kekurangan: proses tulis menjadi sedikit lebih lambat, dan data yang jarang dibaca ikut memenuhi memori.
3. Write-Behind (Write-Back)
Aplikasi menulis ke cache lebih dulu, lalu cache menyimpannya ke database secara bertahap di belakang layar.
- Kelebihan: proses tulis sangat cepat.
- Kekurangan: berisiko kehilangan data jika Redis mati sebelum data sempat disimpan ke database.
| Strategi | Kemudahan | Konsistensi data | Cocok untuk |
|---|---|---|---|
| Cache-Aside | Sangat mudah | Sedang | Mayoritas website dan API |
| Write-Through | Sedang | Tinggi | Data yang harus selalu akurat |
| Write-Behind | Sulit | Rendah | Beban tulis sangat tinggi |
Untuk pemula, mulailah dengan cache-aside.
Contoh Redis Cache di Node.js dan Express
Berikut contoh penerapan cache-aside sederhana.
Langkah 1: Jalankan Redis dan Install Paket
Jika memakai Docker, jalankan Redis dengan satu perintah:
bash
docker run -d --name redis-cache -p 6379:6379 redis:7
npm install express redis
Langkah 2: Terapkan Cache-Aside
javascript
import express from 'express';
import { createClient } from 'redis';
const app = express();
const redis = createClient({ url: 'redis://localhost:6379' });
redis.on('error', (err) => console.error('Redis error:', err));
async function ambilProdukDariDatabase(id) {
// Ganti dengan query database Anda yang sebenarnya
return { id, nama: 'Kopi Arabika', harga: 45000 };
}
app.get('/api/produk/:id', async (req, res) => {
const key = `produk:${req.params.id}`;
// 1. Cek Redis terlebih dahulu
const cached = await redis.get(key);
if (cached) {
return res.json({ sumber: 'cache', data: JSON.parse(cached) });
}
// 2. Cache miss: ambil dari database
const data = await ambilProdukDariDatabase(req.params.id);
// 3. Simpan ke Redis selama 5 menit (300 detik)
await redis.set(key, JSON.stringify(data), { EX: 300 });
res.json({ sumber: 'database', data });
});
await redis.connect();
app.listen(3000, () => console.log('Server jalan di port 3000'));
Simpan file sebagai server.mjs agar await di level atas berfungsi. Panggil endpoint dua kali. Respons pertama menampilkan sumber: database, respons kedua sumber: cache.
Langkah 3: Hapus Cache Saat Data Berubah
Setiap kali data diperbarui, hapus cache lamanya agar pengguna tidak melihat data basi:
javascript
app.put('/api/produk/:id', async (req, res) => {
// ... update database ...
await redis.del(`produk:${req.params.id}`);
res.json({ pesan: 'Produk diperbarui' });
});
Mengatur TTL dan Invalidasi Cache
Dua hal ini sering disebut bagian tersulit dari caching.
TTL (Time To Live) adalah umur data di cache. Setelah waktunya habis, data otomatis terhapus. Pada contoh di atas, EX: 300 berarti data hidup 5 menit. Gunakan TTL pendek untuk data yang sering berubah, dan TTL panjang untuk data yang jarang berubah.
Invalidasi adalah proses menghapus atau memperbarui cache ketika data aslinya berubah. Tanpa invalidasi, pengguna bisa melihat harga atau stok lama. Kombinasi TTL yang wajar dan penghapusan manual saat update biasanya sudah cukup untuk kebanyakan aplikasi.
Kesalahan Umum Saat Memakai Redis Cache
- Menyimpan semuanya. Cache hanya efektif untuk data yang sering dibaca. Menyimpan data yang jarang diminta hanya memboroskan memori.
- Tidak memakai TTL. Data menumpuk dan memori Redis penuh. Atur juga kebijakan penghapusan seperti
allkeys-lrusupaya data lama dibuang otomatis. - Lupa invalidasi. Pengguna melihat data basi dan mengira aplikasi bermasalah.
- Cache stampede. Saat satu key populer kedaluwarsa, ratusan permintaan serentak menyerbu database. Beri TTL yang sedikit acak agar key tidak kedaluwarsa bersamaan.
- Membuka port Redis ke publik. Redis bawaan tidak memakai password. Selalu pasang autentikasi dan batasi akses lewat firewall.
Redis Cache dan Optimasi Performa Lainnya
Redis cache bukan pengganti optimasi database, melainkan pelengkapnya. Sebelum menambah cache, pastikan query Anda sudah efisien lewat database indexing. Jika aplikasi sering kehabisan koneksi saat ramai, pelajari juga database connection pooling.
Redis juga cocok untuk menyimpan hitungan request pada rate limiting API yang berjalan di banyak server, karena semua server bisa berbagi hitungan yang sama.
Untuk dokumentasi resmi dan daftar perintah lengkap, kunjungi dokumentasi Redis.
Pertanyaan yang Sering Diajukan (FAQ)
Apa bedanya Redis cache dengan database biasa?
Redis menyimpan data di memori sehingga sangat cepat, tetapi kapasitasnya terbatas dan datanya bersifat sementara. Database menyimpan data permanen di disk dengan kapasitas jauh lebih besar.
Apakah Redis cache cocok untuk website WordPress?
Cocok. Plugin object cache berbasis Redis bisa mengurangi jumlah query database dan mempercepat halaman, terutama pada website dengan banyak pengunjung.
Apakah data di Redis bisa hilang?
Bisa, terutama jika Redis dipakai murni sebagai cache dan server restart. Karena itu, jangan jadikan Redis satu-satunya tempat menyimpan data penting. Simpan data utama di database.
Berapa lama TTL yang ideal?
Tidak ada angka baku. Mulailah dari 5 sampai 15 menit untuk data umum, lalu sesuaikan dengan seberapa sering datanya berubah.
Apakah Redis cache wajib untuk semua aplikasi?
Tidak. Untuk website kecil dengan trafik rendah, optimasi query dan caching bawaan sering sudah cukup. Redis cache baru terasa perlu saat trafik dan beban database mulai meningkat.
Kesimpulan
Redis cache adalah cara praktis untuk mempercepat website dan aplikasi dengan menyimpan data yang sering diminta di memori. Mulailah dari strategi cache-aside, atur TTL yang masuk akal, dan jangan lupa menghapus cache saat data berubah. Kombinasikan dengan indexing dan connection pooling untuk hasil performa yang maksimal.
Coba terapkan Redis cache pada satu endpoint yang paling sering diakses di aplikasi Anda, lalu bandingkan waktu responsnya sebelum dan sesudah. Jika Anda butuh bantuan membangun website atau aplikasi yang cepat dan andal, tim Powercode siap membantu.

