✦ Selamat Idul Fitri 1447 H πŸŒ™ Taqabbalallahu minna wa minkum. Mohon maaf lahir dan batin. ✦
Oprek Blog

Cara Saya Menangani Cache di Blog Tanpa Redis atau Memcached

Β· Diperbarui 26 Feb 2026 Β· 0 komentar Β· Β± 3 menit baca Β· πŸ‘ 63 dilihat

Cache adalah salah satu teknik paling efektif untuk mempercepat website. Ideanya sederhana: daripada melakukan operasi yang sama berulang kali (query database, proses data, generate HTML), simpan hasilnya sementara dan pakai lagi sampai datanya berubah.

Tools cache yang populer seperti Redis atau Memcached itu sangat powerful β€” tapi butuh konfigurasi server tambahan dan tidak selalu tersedia di hosting shared yang sederhana. Di blog ini, saya pakai pendekatan yang lebih sederhana: file-based caching dengan PHP murni.

Konsep Dasarnya

Logika file cache itu sederhana:

  1. Cek apakah sudah ada file cache untuk data yang diminta
  2. Kalau ada dan belum kadaluarsa, pakai data dari file itu
  3. Kalau tidak ada atau sudah kadaluarsa, ambil data dari database, simpan ke file cache, lalu pakai

Implementasinya di PHP:

function get_cache($key, $ttl = 3600) {
$file = __DIR__ . '/cache/' . md5($key) . '.cache';
if (file_exists($file) && (time() - filemtime($file) < $ttl)) {
return unserialize(file_get_contents($file));
}
return false;
}
function set_cache($key, $data) {
$file = __DIR__ . '/cache/' . md5($key) . '.cache';
file_put_contents($file, serialize($data));
}

Penggunaannya:

$cache_key = 'artikel_populer';
$data = get_cache($cache_key, 1800); // cache 30 menit
if (!$data) {
// Ambil dari database
$data = query_artikel_populer();
set_cache($cache_key, $data);
}
// Pakai $data

Apa yang Saya Cache

Tidak semua data perlu dicache. Yang saya pilih untuk dicache adalah data yang sering diakses tapi jarang berubah: daftar artikel populer, daftar kategori, dan beberapa bagian sidebar yang isinya relatif statis.

Yang tidak saya cache: halaman artikel individual (karena saya ingin tampilan komentar selalu fresh) dan data di panel admin (tidak perlu, penggunanya cuma saya sendiri).

Invalidasi Cache β€” Bagian yang Sering Diabaikan

Cache yang tidak pernah diperbarui itu sama buruknya dengan tidak ada cache β€” pengunjung bisa dapat data yang sudah ketinggalan. Invalidasi cache (kapan dan bagaimana file cache dihapus atau diperbarui) adalah bagian yang sering diabaikan tapi penting.

Di blog ini saya pakai dua strategi invalidasi:

Time-based expiry: setiap cache punya TTL (time to live) β€” berapa detik sampai dia dianggap kadaluarsa. Setelah TTL habis, permintaan berikutnya akan generate cache baru dari database.

Event-based invalidation: ketika ada artikel baru dipublikasikan atau ada artikel yang diedit dari panel admin, saya hapus file cache yang relevan supaya langsung di-generate ulang. Ini memastikan perubahan konten langsung terlihat tanpa harus nunggu TTL habis.

function clear_cache($key = null) {
if ($key) {
$file = __DIR__ . '/cache/' . md5($key) . '.cache';
if (file_exists($file)) unlink($file);
} else {
// Hapus semua cache
array_map('unlink', glob(__DIR__ . '/cache/*.cache'));
}
}

Limitasi dan Trade-off

File-based cache lebih lambat dari memory-based cache seperti Redis atau Memcached β€” operasi baca-tulis ke disk memang lebih lambat dari memori. Tapi untuk blog dengan traffic tidak terlalu tinggi, perbedaannya tidak terlalu signifikan dan file-based cache sudah cukup untuk memberikan peningkatan performa yang berarti.

Satu hal yang perlu diperhatikan: folder cache harus tidak bisa diakses langsung dari browser. Tambahkan file .htaccess di folder cache dengan isi Deny from all.

Solusi sederhana yang bekerja baik untuk kebutuhan yang sesuai. Tidak semua masalah butuh solusi yang paling canggih.

Kamu pakai teknik caching apa di project-mu? Atau belum pakai sama sekali? Cerita di komentar ya.


Komentar

Belum ada komentar. Jadilah yang pertama menulis.

Tulis Komentar

↑