Cache: Mempercepat Aplikasi

Menyimpan hasil yang mahal dengan Cache::remember, flexible, touch, invalidasi, tag, dan lock.

Part 22 dari 26 ± 40 menit Gratis

Mengapa cache?

Beberapa pekerjaan mahal: query berat, agregasi laporan, panggilan API pihak ketiga. Jika hasilnya jarang berubah, hitung sekali, simpan sebentar di tempat yang cepat, dan layani permintaan berikutnya dari sana. Hasilnya: respons milidetik alih-alih detik, dan beban database turun drastis.

Driver cache

Diatur di config/cache.php / CACHE_STORE. Bawaan proyek baru: database (tanpa instalasi tambahan). Untuk performa: Redis atau Memcached. Ada pula file, array (untuk tes), storage, dynamodb, dan driver failover yang otomatis beralih ke store cadangan bila store utama gagal.

Operasi dasar

use Illuminate\Support\Facades\Cache;

Cache::put('kunci', 'nilai', 600);        // simpan 600 detik
Cache::get('kunci', 'bawaan');            // baca (atau nilai bawaan)
Cache::has('kunci');
Cache::forget('kunci');                   // hapus
Cache::forever('kunci', 'nilai');         // tanpa kedaluwarsa
Cache::add('kunci', 'nilai', 600);        // hanya jika belum ada (atomik)
Cache::increment('kunjungan');            // penghitung

remember: pola yang paling berguna

$populer = Cache::remember('produk:populer', 600, function () {
    return Produk::tersedia()->orderByDesc('terjual')->limit(10)->get();
});

Cache hit → langsung dikembalikan; miss → closure dijalankan, hasil disimpan lalu dikembalikan. Satu baris menggantikan blok if-else.

flexible: stale-while-revalidate (baru)

$detail = Cache::flexible("produk:{$id}", [60, 300], fn () => Produk::with('kategori')->findOrFail($id));

Array [60, 300]: data dianggap segar selama 60 detik; antara 60–300 detik data basi tetap dilayani sementara versi baru dihitung di latar belakang; lewat 300 detik dihitung ulang langsung. Pengguna hampir tidak pernah menunggu perhitungan ulang.

touch: memperpanjang umur — baru di Laravel 13

Cache::touch('promo:aktif', 3600);        // perpanjang TTL tanpa membaca & menyimpan ulang nilainya
// true bila item ada dan diperpanjang; false bila tak ada

Memoization: hanya sekali per request

Cache::memo()->get('kunci');   // pemanggilan berikutnya di request yang sama diambil dari memori

Invalidasi: bagian tersulit

Ada pepatah: "Hanya ada dua hal sulit dalam ilmu komputer: invalidasi cache dan menamai sesuatu." Aturan praktis: saat data sumber berubah, hapus kunci cache terkait:

public function perbarui(Produk $produk, array $data): Produk
{
    $produk->update($data);
    Cache::forget("produk:{$produk->id}");
    Cache::forget('produk:populer');
    return $produk;
}

Gunakan kunci yang konsisten dan deskriptif (produk:12, laporan:harian:2026-10-08). Atau pasang di observer model agar otomatis.

Tag (Redis/Memcached)

Cache::tags(['produk', 'katalog'])->put('daftar', $data, 600);
Cache::tags('produk')->flush();         // hapus SEMUA entri bertag "produk"

Tag tidak didukung driver file, database, storage, dan dynamodb.

Atomic lock: mencegah balapan

Cache::lock('laporan:harian', 120)->get(function () {
    // hanya satu proses yang boleh masuk; lock otomatis dilepas setelah selesai
});

Cache::lock('laporan:harian', 120)->block(5, function () { /* tunggu maksimal 5 detik */ });
Cache::withoutOverlapping('impor', fn () => /* ... */);

Hati-hati

  • Jangan men-cache data khusus pengguna dengan kunci yang sama untuk semua orang.
  • Laravel 13 menambah opsi serializable_classes di config/cache.php (bawaan false) untuk memperkeras deserialisasi cache: bila kamu menyimpan objek PHP di cache, daftarkan kelasnya; atau simpan array biasa. Menyimpan array/ID lebih aman & portabel.
  • Cache bisa hilang kapan saja — jangan jadikan satu-satunya penyimpanan data penting.
  • Perintah: php artisan cache:clear, config:cache, route:cache, view:cache, optimize.

Praktikkan langsung, gratis

Tulis dan jalankan kode langsung di browser, dapatkan penilaian otomatis. Daftar gratis kapan saja untuk menyimpan progres dan meraih sertifikat.

Coba latihan sekarang, tanpa daftar
Bagikan: WhatsApp Facebook LinkedIn X