Laravel Cache: Perbedaan File, Redis, dan Database Cache
Cache merupakan salah satu teknik penting untuk meningkatkan performa aplikasi web. Dengan cache, aplikasi tidak perlu melakukan proses yang sama berulang kali ketika data yang dibutuhkan sebenarnya masih tersedia.
Laravel menyediakan sistem Cache yang membuat proses penyimpanan dan pengambilan data sementara menjadi lebih mudah. Laravel juga mendukung beberapa cache store, termasuk File, Database, dan Redis.
Ketiga pilihan tersebut memiliki karakteristik yang berbeda. File cache mudah digunakan dan tidak membutuhkan service tambahan, database cache memanfaatkan database yang sudah tersedia, sedangkan Redis menawarkan performa tinggi dan cocok untuk aplikasi dengan kebutuhan caching yang lebih intensif.
Memilih cache store yang tepat penting karena strategi caching dapat memengaruhi performa, skalabilitas, dan kompleksitas deployment aplikasi Laravel.
Artikel ini membahas Laravel Cache, cara kerjanya, perbedaan File, Database, dan Redis Cache, contoh penggunaannya, serta kapan sebaiknya menggunakan masing-masing pilihan.
Apa Itu Laravel Cache?
Laravel Cache adalah sistem penyimpanan sementara yang dapat digunakan aplikasi untuk menyimpan data yang sering dibutuhkan agar tidak perlu diproses atau diambil ulang setiap saat.
Contohnya, aplikasi memiliki query untuk mengambil daftar kategori:
$categories = Category::orderBy('name')->get();
Jika query tersebut dijalankan pada setiap request, database harus melakukan pekerjaan yang sama berkali-kali.
Dengan cache, hasil query dapat disimpan sementara:
use Illuminate\Support\Facades\Cache;
$categories = Cache::remember(
'categories',
3600,
fn () => Category::orderBy('name')->get()
);
Pada contoh tersebut, Laravel akan mencoba mengambil data dari cache terlebih dahulu. Jika data belum tersedia, callback akan dijalankan dan hasilnya disimpan ke cache.
Mengapa Cache Dibutuhkan?
Cache berguna ketika aplikasi sering meminta data yang sama atau menjalankan proses yang relatif mahal.
Beberapa contoh penggunaan cache antara lain:
- hasil query database;
- konfigurasi tertentu;
- data dashboard;
- daftar kategori dan produk;
- hasil API eksternal;
- data yang jarang berubah;
- hasil perhitungan yang membutuhkan resource besar.
Misalnya sebuah halaman membutuhkan query yang memerlukan waktu 300 ms dan halaman tersebut diakses ribuan kali. Jika data tidak berubah dalam waktu tertentu, menyimpan hasilnya dalam cache dapat mengurangi beban database.
Namun, cache bukan berarti semua data harus disimpan di cache. Cache harus digunakan secara selektif karena data cache tetap membutuhkan strategi invalidasi dan storage.
Bagaimana Laravel Cache Bekerja?
Konsep dasar cache cukup sederhana:
Request
↓
Cek Cache
↓
Data tersedia?
├── Ya → Gunakan data cache
│
└── Tidak
↓
Ambil dari database/API
↓
Simpan ke cache
↓
Gunakan data
Laravel menyediakan API yang relatif konsisten untuk berinteraksi dengan cache. Artinya, kode aplikasi tidak harus berubah secara besar-besaran ketika cache store dipindahkan dari file ke Redis.
Cache Store dan Cache Driver
Laravel menggunakan konsep cache store untuk menentukan tempat data cache disimpan.
Konfigurasi cache berada di:
config/cache.php
Default cache store dapat ditentukan melalui environment:
CACHE_STORE=file
Nilai tersebut menentukan store yang digunakan aplikasi ketika memanggil facade Cache tanpa menentukan store secara eksplisit.
Konfigurasi dapat berbeda tergantung versi Laravel dan konfigurasi aplikasi. Karena itu, gunakan file config/cache.php sebagai referensi utama pada project yang sedang digunakan.
Laravel File Cache
File Cache menyimpan data cache pada filesystem server.
Pilihan ini biasanya merupakan cara paling sederhana untuk memulai caching pada aplikasi Laravel karena tidak membutuhkan service cache tambahan.
Konfigurasi environment dapat menggunakan:
CACHE_STORE=file
Lokasi penyimpanan cache mengikuti konfigurasi filesystem Laravel.
Untuk menggunakan File Cache, kode aplikasinya tetap sederhana:
use Illuminate\Support\Facades\Cache;
Cache::put('site_name', 'Laravel App', 3600);
Data tersebut kemudian dapat diambil menggunakan:
$siteName = Cache::get('site_name');
Kelebihan File Cache
- mudah dikonfigurasi;
- tidak membutuhkan service tambahan;
- cocok untuk development;
- cukup untuk aplikasi sederhana;
- mudah dipahami oleh developer baru.
Kekurangan File Cache
- akses filesystem memiliki overhead;
- kurang ideal untuk caching dengan traffic sangat tinggi;
- kurang cocok untuk environment multi-server jika setiap server memiliki filesystem sendiri;
- skalabilitasnya lebih terbatas dibandingkan solusi in-memory seperti Redis.
Laravel Database Cache
Database Cache menyimpan data cache pada database aplikasi.
Pilihan ini dapat berguna ketika aplikasi sudah memiliki database dan ingin menghindari penambahan service seperti Redis.
Konfigurasi environment dapat menggunakan store database sesuai konfigurasi Laravel:
CACHE_STORE=database
Database cache membutuhkan tabel khusus untuk menyimpan item cache.
Pada versi Laravel yang menyediakan migration cache melalui Artisan, tabel tersebut dapat dibuat dengan:
php artisan make:cache-table
php artisan migrate
Nama atau ketersediaan command dapat berbeda berdasarkan versi Laravel yang digunakan. Jika command tersebut tidak tersedia, periksa migration dan dokumentasi versi Laravel pada project Anda.
Kelebihan Database Cache
- tidak membutuhkan service caching terpisah;
- mudah digunakan jika database sudah tersedia;
- data cache dapat dikelola dalam infrastruktur database yang sama;
- cukup praktis untuk aplikasi dengan kebutuhan caching sederhana hingga menengah.
Kekurangan Database Cache
- cache tetap menggunakan resource database;
- query cache dapat menambah beban database;
- kurang ideal jika database sudah menjadi bottleneck;
- umumnya tidak secepat penyimpanan in-memory seperti Redis.
Laravel Redis Cache
Redis merupakan in-memory data store yang sering digunakan sebagai cache pada aplikasi Laravel.
Karena data dapat disimpan dan diakses dari memory, Redis sangat cocok untuk kebutuhan cache dengan frekuensi akses tinggi dan latency rendah.
Konfigurasi Laravel dapat menggunakan Redis sebagai cache store, misalnya:
CACHE_STORE=redis
Konfigurasi koneksi Redis biasanya juga berada pada file:
config/database.php
Contoh penggunaan cache tidak berbeda jauh dengan File atau Database Cache:
use Illuminate\Support\Facades\Cache;
Cache::put('site_name', 'Laravel App', 3600);
Data kemudian dapat diambil:
$siteName = Cache::get('site_name');
Inilah salah satu kelebihan abstraction layer Laravel. Kode aplikasi dapat tetap menggunakan API Cache meskipun media penyimpanannya berubah.
Kelebihan Redis Cache
- akses data sangat cepat;
- cocok untuk aplikasi dengan traffic tinggi;
- cocok untuk caching yang intensif;
- dapat digunakan oleh beberapa application server;
- dapat digunakan untuk kebutuhan lain seperti queue, session, dan locking sesuai konfigurasi aplikasi.
Kekurangan Redis Cache
- membutuhkan service Redis;
- deployment lebih kompleks dibandingkan File Cache;
- membutuhkan resource memory;
- perlu monitoring dan konfigurasi yang tepat pada production.
Perbedaan File, Database, dan Redis Cache
Secara umum, perbedaan ketiga cache store tersebut dapat diringkas sebagai berikut:
| Aspek | File | Database | Redis |
|---|---|---|---|
| Storage | Filesystem | Database | Memory/data store |
| Kecepatan | Cukup | Cukup | Sangat cepat |
| Setup | Mudah | Sedang | Lebih kompleks |
| Service tambahan | Tidak | Tidak | Ya |
| Multi-server | Terbatas | Ya | Ya |
| Cocok untuk traffic tinggi | Kurang ideal | Kurang ideal | Ya |
Perlu diingat bahwa performa sebenarnya bergantung pada arsitektur aplikasi, konfigurasi server, ukuran data, pola akses, network latency, dan workload. Tabel di atas merupakan gambaran umum, bukan benchmark universal.
Cara Menyimpan Data ke Laravel Cache
Laravel menyediakan beberapa metode untuk menyimpan data ke cache.
Menggunakan put()
Metode put() digunakan untuk menyimpan item cache dengan waktu kedaluwarsa tertentu.
Cache::put('username', 'Budi', 3600);
Pada contoh tersebut, data username disimpan dengan nilai Budi selama 3600 detik.
Menggunakan remember()
remember() sangat berguna ketika data berasal dari database atau proses yang membutuhkan resource.
$products = Cache::remember(
'products',
3600,
fn () => Product::latest()->get()
);
Jika key products sudah tersedia, Laravel menggunakan data dari cache. Jika belum tersedia, callback dijalankan dan hasilnya disimpan.
Menggunakan rememberForever()
Untuk data yang ingin disimpan tanpa expiration otomatis, Laravel menyediakan rememberForever().
$settings = Cache::rememberForever(
'site_settings',
fn () => Setting::all()
);
Namun, data yang disimpan secara permanen tetap membutuhkan strategi invalidasi. Forever bukan berarti data tidak pernah perlu diperbarui.
Mengambil Data dari Cache
Data sederhana dapat diambil menggunakan:
$value = Cache::get('username');
Jika key tidak ditemukan, hasilnya dapat berupa null.
Anda juga dapat menyediakan default value:
$value = Cache::get('username', 'Guest');
Dengan demikian, aplikasi akan menggunakan Guest ketika key username belum tersedia.
Mengecek Apakah Cache Tersedia
Gunakan has() untuk memeriksa apakah sebuah key tersedia:
if (Cache::has('username')) {
// Cache tersedia
}
Namun, jika tujuan Anda adalah mengambil data atau membuatnya ketika belum ada, biasanya remember() lebih praktis daripada melakukan pengecekan secara manual.
Menghapus Cache
Item tertentu dapat dihapus menggunakan:
Cache::forget('username');
Penghapusan cache sangat penting ketika data sumber berubah.
Misalnya produk diperbarui:
$product->update($data);
Cache::forget("product:{$product->id}");
Dengan demikian, request berikutnya dapat mengambil data terbaru dan menyimpannya kembali ke cache.
Memahami Cache Invalidation
Salah satu tantangan terbesar dalam caching adalah cache invalidation.
Bayangkan aplikasi menyimpan data produk:
$product = Cache::remember(
"product:{$id}",
3600,
fn () => Product::findOrFail($id)
);
Jika administrator mengubah nama produk, data lama masih mungkin tersedia di cache selama masa expiration belum habis.
Karena itu, ketika data berubah, cache dapat dihapus:
$product->update($data);
Cache::forget("product:{$product->id}");
Strategi ini membuat aplikasi lebih konsisten antara data database dan data cache.
Cache Key yang Baik
Penamaan cache key perlu dibuat konsisten agar mudah dikelola.
Contoh yang baik:
product:15
product:15:detail
user:25:profile
category:10:products
Hindari key yang terlalu umum seperti:
data
item
result
Key yang deskriptif membantu mengurangi kemungkinan benturan dan mempermudah proses debugging.
Menggunakan Prefix untuk Cache Key
Untuk aplikasi yang menggunakan satu cache store bersama beberapa aplikasi atau environment, prefix dapat membantu memisahkan key.
Contohnya, key dapat memiliki pola:
production:product:15
staging:product:15
Detail konfigurasi prefix bergantung pada cache store dan konfigurasi Laravel yang digunakan.
Kapan Sebaiknya Menggunakan File Cache?
File Cache cocok ketika:
- aplikasi masih sederhana;
- traffic belum terlalu tinggi;
- aplikasi berjalan pada satu server;
- ingin setup yang sederhana;
- sedang melakukan development atau prototyping.
Contohnya, aplikasi internal kecil dengan satu server dapat menggunakan File Cache tanpa harus menambahkan Redis hanya untuk kebutuhan caching sederhana.
Kapan Sebaiknya Menggunakan Database Cache?
Database Cache dapat menjadi pilihan ketika:
- aplikasi sudah menggunakan database yang stabil;
- ingin menghindari service tambahan;
- kebutuhan caching tidak terlalu intensif;
- arsitektur aplikasi masih relatif sederhana.
Namun, jika database sudah menjadi bottleneck, menggunakan database yang sama sebagai cache mungkin justru menambah beban.
Kapan Sebaiknya Menggunakan Redis?
Redis lebih menarik ketika aplikasi membutuhkan caching dengan performa tinggi atau memiliki beberapa application server.
Redis cocok dipertimbangkan untuk:
- aplikasi dengan traffic tinggi;
- data yang sering dibaca;
- session storage;
- queue dan kebutuhan infrastruktur terkait;
- distributed caching;
- aplikasi dengan lebih dari satu application server.
Jika aplikasi sudah memiliki Redis sebagai bagian dari infrastrukturnya, menggunakan Redis sebagai cache store Laravel biasanya menjadi pilihan yang praktis.
Apakah Redis Selalu Lebih Baik?
Tidak.
Redis memang memiliki karakteristik performa yang sangat baik untuk caching, tetapi memilih teknologi tidak hanya berdasarkan kecepatan.
Jika aplikasi sederhana hanya berjalan pada satu server dengan traffic rendah, File Cache mungkin sudah cukup.
Menambahkan Redis berarti ada service tambahan yang harus dikonfigurasi, diamankan, dimonitor, dan dipelihara.
Prinsip yang lebih tepat adalah gunakan solusi yang sesuai dengan kebutuhan aplikasi, bukan selalu memilih teknologi yang paling kompleks.
Laravel Cache untuk Query Database
Salah satu penggunaan cache yang paling umum adalah menyimpan hasil query.
Tanpa cache:
$posts = Post::where('published', true)
->latest()
->get();
Dengan cache:
$posts = Cache::remember(
'published_posts',
600,
fn () => Post::where('published', true)
->latest()
->get()
);
Jika halaman tersebut sangat sering diakses dan data tidak berubah setiap detik, pendekatan ini dapat mengurangi jumlah query database.
Namun, pastikan TTL dan strategi invalidasi sesuai dengan kebutuhan data.
Cache Data API Eksternal
Cache juga berguna ketika aplikasi memanggil API eksternal.
Misalnya aplikasi mengambil kurs mata uang:
$exchangeRate = Cache::remember(
'exchange_rate_usd_idr',
900,
fn () => $this->currencyService->getRate()
);
Dengan TTL 15 menit, aplikasi tidak perlu memanggil API eksternal pada setiap request.
Selain mengurangi latency, pendekatan ini juga dapat mengurangi jumlah request ke service eksternal.
Cache dan Multi-Server
Perbedaan antara File Cache dan Redis menjadi lebih penting ketika aplikasi menggunakan beberapa server.
Misalnya terdapat:
Load Balancer
↓
┌────┴────┐
↓ ↓
Server A Server B
Jika Server A dan Server B menggunakan filesystem lokal masing-masing, cache yang dibuat di Server A belum tentu tersedia di Server B.
Redis dapat digunakan sebagai shared cache store:
Load Balancer
↓
┌────┴────┐
↓ ↓
Server A Server B
\ /
Redis
Dengan pendekatan tersebut, kedua application server dapat menggunakan cache store yang sama.
Hal yang Perlu Diperhatikan Saat Menggunakan Cache
Cache dapat meningkatkan performa, tetapi penggunaan yang salah juga dapat menimbulkan masalah.
Cache Stale Data
Data cache dapat menjadi tidak sesuai dengan database jika TTL terlalu lama atau invalidation tidak dilakukan.
Cache Stampede
Jika sebuah cache yang populer kedaluwarsa dan banyak request datang secara bersamaan, semuanya dapat mencoba mengambil data dari database pada waktu yang sama.
Pada aplikasi dengan traffic tinggi, kondisi seperti ini perlu diperhatikan dan dapat ditangani menggunakan strategi locking atau pendekatan caching yang sesuai.
Cache Key Collision
Key yang tidak terstruktur dapat menyebabkan data dari satu fitur menimpa data fitur lain.
Gunakan naming convention yang konsisten.
Cache Tidak Sama dengan Database
Cache sebaiknya diperlakukan sebagai data sementara. Jangan menganggap cache sebagai sumber kebenaran utama aplikasi kecuali arsitektur memang dirancang secara khusus untuk itu.
Perintah Artisan yang Berkaitan dengan Cache
Laravel menyediakan beberapa command Artisan untuk pengelolaan cache aplikasi.
Salah satu command yang sering digunakan untuk membersihkan application cache adalah:
php artisan cache:clear
Untuk membersihkan berbagai cache yang berkaitan dengan optimasi aplikasi, pada versi Laravel yang mendukungnya dapat digunakan:
php artisan optimize:clear
Gunakan command sesuai kebutuhan. Jangan menghapus seluruh cache production secara sembarangan karena proses tersebut dapat menyebabkan lonjakan beban ketika aplikasi harus membangun ulang cache.
Rekomendasi Memilih Laravel Cache Store
Jika masih bingung memilih, gunakan panduan sederhana berikut:
| Kondisi | Pilihan yang Masuk Akal |
|---|---|
| Development sederhana | File |
| Aplikasi kecil satu server | File atau Database |
| Database masih longgar dan tidak ingin service tambahan | Database |
| Traffic tinggi | Redis |
| Multi-server | Redis atau shared cache store |
| Kebutuhan cache intensif | Redis |
Pilihan akhir tetap perlu mempertimbangkan arsitektur, workload, biaya infrastruktur, dan kemampuan tim dalam mengelola service tersebut.
Kesimpulan
Laravel Cache membantu aplikasi mengurangi pekerjaan yang tidak perlu dengan menyimpan data yang sering digunakan untuk sementara waktu.
Laravel mendukung beberapa pilihan cache store, termasuk File, Database, dan Redis.
File Cache merupakan pilihan sederhana dan mudah digunakan, terutama untuk development dan aplikasi kecil. Database Cache dapat menjadi pilihan praktis ketika aplikasi ingin memanfaatkan database yang sudah tersedia tanpa menambahkan service baru. Sementara itu, Redis lebih cocok untuk aplikasi yang membutuhkan performa tinggi, caching intensif, atau shared cache pada arsitektur multi-server.
Contoh penggunaan cache yang sederhana adalah:
use Illuminate\Support\Facades\Cache;
$data = Cache::remember(
'products',
3600,
fn () => Product::latest()->get()
);
Hal yang paling penting bukan sekadar memilih cache yang paling cepat, tetapi menentukan data apa yang layak di-cache, berapa lama data disimpan, bagaimana cache di-invalidasi, dan cache store mana yang sesuai dengan arsitektur aplikasi.
Untuk aplikasi sederhana, File Cache bisa sudah lebih dari cukup. Ketika kebutuhan aplikasi berkembang dan caching menjadi bagian penting dari performa, Redis dapat menjadi pilihan yang lebih tepat.

