Caching di Laravel untuk Performa

Halaman yang lambat membuat pengguna kabur dan menurunkan peringkat SEO. Sering kali penyebabnya adalah query database yang berat atau perhitungan yang diulang di setiap request. C...

Caching di Laravel untuk Performa

Halaman yang lambat membuat pengguna kabur dan menurunkan peringkat SEO. Sering kali penyebabnya adalah query database yang berat atau perhitungan yang diulang di setiap request. Caching menyelesaikan ini dengan menyimpan hasil sekali, lalu menyajikannya berulang kali secara instan. Tutorial ini membahas caching di Laravel 10/11 secara praktis, lengkap dengan kode nyata dan strategi invalidasi.

Cara Kerja Cache di Laravel

Laravel menyediakan API cache yang seragam lewat facade Cache. Apa pun driver-nya — file, database, Redis, Memcached — kode Anda tetap sama. Konsep intinya sederhana: simpan nilai dengan kunci, ambil kembali dengan kunci itu, dan biarkan kedaluwarsa setelah durasi tertentu.

use Illuminate\Support\Facades\Cache;

Cache::put('key', 'value', now()->addHour());
$value = Cache::get('key');

1. Memilih Driver Cache

Driver diatur di .env. Default-nya file, yang cukup untuk aplikasi kecil karena tidak butuh layanan tambahan:

CACHE_STORE=file

Untuk performa maksimal dan fitur seperti cache tags, gunakan redis:

CACHE_STORE=redis

Redis menyimpan cache di memori sehingga akses sangat cepat, dan mendukung fitur lanjutan yang tidak tersedia di driver file.

Perlu diingat bahwa driver menentukan di mana data cache disimpan, bukan bagaimana Anda memanggilnya. Karena itu Anda bisa mulai dengan driver file saat pengembangan lalu berpindah ke redis di produksi tanpa mengubah satu baris pun kode aplikasi. Inilah kekuatan abstraksi cache Laravel: kode tetap konsisten sementara infrastruktur bebas Anda ganti sesuai skala.

2. Pola remember() untuk Query Mahal

Pola paling berguna adalah remember(): jika data ada di cache, kembalikan; jika tidak, jalankan closure, simpan hasilnya, lalu kembalikan. Sempurna untuk membungkus query berat yang sering dipanggil di halaman utama atau dashboard:

$products = Cache::remember('featured_products', 3600, function () {
    return Product::where('is_featured', true)
        ->with('category')
        ->orderBy('sold', 'desc')
        ->take(10)
        ->get();
});

Query hanya menyentuh database sekali per jam (3600 detik). Request berikutnya mengambil data dari cache dalam hitungan milidetik. Untuk data yang jarang berubah, gunakan rememberForever() yang menyimpan tanpa kedaluwarsa:

$settings = Cache::rememberForever('site_settings', function () {
    return Setting::pluck('value', 'key');
});

3. Menyimpan dan Mengambil Manual

Selain remember(), Anda bisa mengelola cache secara manual:

Cache::put('visitor_count', 100, 600); // 10 menit
Cache::increment('visitor_count');
Cache::has('visitor_count');            // true
Cache::forget('visitor_count');         // hapus
Cache::flush();                         // hapus semua (hati-hati!)

4. Cache Tags untuk Pengelompokan

Saat cache Anda banyak, menghapus satu per satu merepotkan. Cache tags (hanya di driver redis/memcached) mengelompokkan entri sehingga bisa dihapus sekaligus:

Cache::tags(['products', 'homepage'])->put('best_sellers', $data, 3600);

// Hapus semua cache bertag 'products' sekali jalan
Cache::tags(['products'])->flush();

Ini sangat berguna: ketika sebuah produk diperbarui, Anda cukup menghapus tag products tanpa menyentuh cache lain seperti sesi atau pengaturan. Tanpa tags, Anda harus mengingat setiap kunci cache yang berkaitan dengan produk dan menghapusnya satu per satu — pendekatan yang rapuh dan mudah menimbulkan bug ketika aplikasi bertambah besar.

5. Strategi Invalidasi Cache

Ada pepatah terkenal: "hal tersulit di komputer adalah penamaan variabel dan invalidasi cache." Inti masalahnya: cache yang basi menyajikan data lama. Strategi yang andal adalah menghapus cache saat data sumber berubah. Gunakan model event untuk mengotomatiskannya:

class Product extends Model
{
    protected static function booted(): void
    {
        static::saved(fn () => Cache::forget('featured_products'));
        static::deleted(fn () => Cache::forget('featured_products'));
    }
}

Dengan cara ini, setiap kali produk disimpan atau dihapus, cache terkait otomatis dibersihkan sehingga request berikutnya membangun ulang data segar. Untuk grup besar, gabungkan dengan cache tags seperti di langkah sebelumnya.

6. Cache Bawaan Framework: Config, Route, dan View

Selain cache aplikasi, Laravel punya cache untuk mempercepat framework itu sendiri. Wajib dijalankan di produksi, tetapi jangan di lokal saat sedang mengubah konfigurasi:

php artisan config:cache   # gabungkan semua config jadi satu file
php artisan route:cache    # kompilasi route jadi lebih cepat
php artisan view:cache     # pra-kompilasi template Blade

Setelah men-deploy perubahan, bersihkan agar tidak menyajikan versi lama:

php artisan optimize:clear

Perintah optimize:clear membersihkan config, route, view, dan cache aplikasi sekaligus.

7. Kesalahan Umum yang Perlu Dihindari

  • Meng-cache data yang sering berubah: data seperti stok real-time sebaiknya tidak di-cache lama, atau harus diinvalidasi saat berubah.
  • Lupa membersihkan config cache di lokal: mengubah .env tidak akan berpengaruh jika config sudah di-cache. Jalankan php artisan config:clear.
  • Kunci cache tidak unik: pastikan kunci mencakup parameter yang relevan, misalnya "user_{$id}_orders", agar data antar pengguna tidak tertukar.

Dengan menerapkan remember() pada query mahal, cache tags untuk pengelompokan, invalidasi via model event, dan cache framework di produksi, Anda bisa memangkas beban database secara drastis dan membuat aplikasi terasa jauh lebih responsif.

Kesalahan Umum dalam Caching

Caching mempercepat aplikasi, tetapi penerapan yang keliru justru menimbulkan masalah. Kesalahan paling sering adalah lupa menghapus atau memperbarui cache saat data berubah, sehingga pengguna melihat informasi usang. Kesalahan lain adalah menyimpan data yang terlalu dinamis sehingga cache jarang mengena, atau menetapkan masa berlaku yang tidak sesuai kebutuhan. Hati-hati pula menyimpan data spesifik pengguna di cache global karena berisiko bocor antar pengguna. Tentukan strategi invalidasi yang jelas sejak awal, gunakan kunci cache yang deskriptif, dan pantau rasio cache hit untuk memastikan caching benar-benar efektif. Dengan memahami kapan dan apa yang layak di-cache, Anda memperoleh peningkatan performa tanpa mengorbankan keakuratan data yang dilihat pengguna.

Yudhi
Ditulis oleh
Yudhi
Founder & Lead Developer, GudangCode

Yudhi adalah founder GudangCode dan developer Laravel dengan pengalaman membangun puluhan sistem informasi bisnis siap pakai — mulai dari POS, HRIS, hingga aplikasi manajemen. Ia menulis panduan dan artikel di GudangCode untuk membantu developer Indonesia menjalankan, memahami, dan men-deploy source code Laravel dengan benar.

Laravel PHP MySQL Sistem Informasi Bisnis
Lihat semua artikel Yudhi
Mau source code & aplikasi lengkapnya?

Daftar gratis untuk mengunduh aplikasi bisnis, sistem informasi, dan source code Laravel siap pakai.

Daftar Gratis & Download
Caching Laravel Programming & Laravel
📚 Free Learning Hub

Learn Coding for Free at DhieCoderWeb

Explore Laravel, PHP, JavaScript tutorials, source code, web development guides, and practical programming tips.

DhieCoderWeb
100+
Tutorials
Free
Learning
SEO
Tips
Visit Dhiecoderweb.com →

Dapatkan Akses Penuh Sekarang!

Bergabunglah menjadi member kami dan dapatkan akses eksklusif ke seluruh fitur unggulan aplikasi ini. Proses cepat, mudah, dan langsung bisa Anda gunakan.

Daftar Members Sekarang
Tim Support
Online
Isi data dulu untuk mulai chat:
Beri rating & testimoni sebelum menutup:
Live chat by gudangcode.com