Banyak developer mengira bahwa memasang Redis di depan database otomatis menyelesaikan semua masalah performa. Namun, kenyataannya sering kali berbeda. Implementasi yang serampangan justru menambah beban sistem tanpa memberikan dampak signifikan pada latency. Akibatnya, database tetap “jebol” dan memori Redis habis sia-sia untuk data yang tidak pernah user akses.
Jika Anda sedang menyiapkan sistem untuk skala jutaan user atau bersiap menghadapi technical interview, Anda wajib memahami strategi caching Redis. Ini bukan lagi sekadar opsi, melainkan sebuah kebutuhan teknis. Oleh karena itu, mari kita bedah cara pakar mengoptimalkan resource memori dengan tepat.
Mengapa Harus Redis? Memahami Bottleneck Disk vs RAM
Secara garis besar, kita bisa membagi database ke dalam dua kubu utama:
- Disk-based Database: Contohnya adalah PostgreSQL, MySQL, atau Oracle. Sistem ini menyimpan data di dalam piringan (disk). Meskipun sangat aman, sistem ini bekerja lambat saat menangani ribuan request per detik.
- Memory-based Database: Contoh populernya adalah Redis. Redis menyimpan data langsung di dalam RAM. Selain itu, kecepatannya jauh melampaui disk, sehingga Redis menjadi “obat” mujarab untuk membantu database utama Anda.
Sebagai ilustrasi, halaman depan sebuah e-commerce bisa memicu 5 hingga 10 query sekaligus. Jika 10.000 user datang bersamaan, database harus mengeksekusi 100.000 query dalam satu detik. Oleh sebab itu, tanpa bantuan Redis, server Anda kemungkinan besar akan tumbang seketika.
Pilih-Pilih Data: Anda Tidak Perlu Memasukkan Semua Data
Kesalahan fatal yang sering terjadi adalah ketika developer mencoba melakukan caching pada semua jenis data. Padahal, Anda harus lebih selektif dalam memilih data yang masuk ke memori.
Data yang Cocok Anda Cache:
- Data statis yang sering user baca: Contohnya seperti banner promo, kategori produk, atau data wilayah.
- Hasil query yang berat (Aggregated Data): Anda bisa menyimpan laporan harian atau dashboard analitik yang membutuhkan waktu lama untuk dihitung.
- Data Session: Redis menangani informasi login user dengan sangat efisien karena sistem harus memeriksanya pada setiap request.
Data yang Harus Anda Hindari:
- Data Real-time yang Sangat Akurat: Contohnya adalah saldo bank atau stok barang flash sale. Terlebih lagi, melakukan caching pada saldo sangat berisiko memicu selisih angka (race condition).
- Data Unik yang Jarang Akses: Jangan membuang memori Redis untuk menyimpan alamat lengkap user yang hanya mereka buka sebulan sekali.
- Data yang Berubah Setiap Detik: Sistem akan kelelahan memperbarui cache terus-menerus jika data aslinya berubah terlalu cepat.
2 Strategi Utama dalam Implementasi Caching Redis
Untuk memperbarui data di dalam cache, para senior engineer biasanya menggunakan dua pendekatan utama:
1. Cache Aside (Lazy Loading)
Developer paling sering menggunakan strategi ini. Pertama-tama, aplikasi akan mencari data di dalam Redis.
- Jika data tersedia (Hit): Aplikasi langsung mengirimkan data tersebut ke user.
- Jika data kosong (Miss): Aplikasi mengambil data dari database utama, lalu menyimpannya ke Redis untuk penggunaan berikutnya.
- Ringkasnya, strategi ini sangat efektif untuk data profil user yang sifatnya reaktif.
2. Write Through
Dalam strategi ini, aplikasi langsung memperbarui data di Redis setiap kali ada data baru yang masuk ke database.
- Keuntungannya, data di dalam cache akan selalu segar (fresh). Dengan demikian, user tidak perlu menunggu proses pengambilan data dari database utama.
- Contohnya, Anda bisa menerapkan ini pada katalog produk kelas online yang banyak orang akses secara bersamaan.
Expert Insight: Jebakan Batman “Search Result Caching”
Sebagai tips tingkat lanjut, saya menyarankan Anda untuk tidak melakukan caching pada hasil pencarian dengan filter yang terlalu dinamis.
Banyak developer pemula mencoba menyimpan hasil pencarian (misal: “Sepatu, harga 100rb-200rb, sort termurah”) ke dalam Redis. Namun, masalah besar muncul karena variasi pencarian user tidak terbatas.
- User A mencari rentang harga 100rb-200rb.
- User B mencari rentang harga 100rb-250rb.
- User C menggunakan merk berbeda dengan filter yang sama.
Kondisi ini akan membuat Cache Hit Rate Anda terjun bebas. Akibatnya, Redis akan penuh dengan jutaan kombinasi query yang mungkin tidak akan pernah user lain cari lagi. Oleh karena itu, gunakanlah search engine khusus seperti Elasticsearch daripada memaksa Redis bekerja di luar kapasitasnya.
Menjaga Kebersihan Memori: Cara Menghapus Data
Anda tidak boleh membiarkan data mengendap selamanya di Redis. Maka dari itu, Anda harus mengelola siklus hidup data dengan dua cara:
- TTL (Time to Live): Aturlah durasi otomatis, misalnya 1 jam. Setelah waktu habis, Redis akan menghapus data tersebut secara otomatis.
- Penghapusan Manual: Anda harus menghapus cache secara spesifik saat sistem melakukan aksi
DELETEpada database asli.
Kesimpulan: Ukur Keberhasilan dengan Cache Hit Rate
Anda bisa menganggap implementasi Redis sukses jika Cache Hit Rate sistem Anda tinggi. Artinya, Redis berhasil melayani sebagian besar permintaan user tanpa harus menyentuh database utama. Sebaliknya, jika Redis penuh tetapi database tetap lemot, Anda perlu mengevaluasi kembali strategi yang Anda gunakan.
Apakah Anda pernah mengalami error aneh saat mengimplementasikan Redis?
Tuliskan pengalaman atau pertanyaan Anda di kolom komentar! Selain itu, pastikan Anda berlangganan newsletter kami untuk mendapatkan tips eksklusif seputar arsitektur backend setiap minggunya.
