Laravel Redis: Cara Menggunakan Redis untuk Cache dan Session
Redis merupakan salah satu pilihan populer untuk meningkatkan performa aplikasi Laravel, terutama ketika digunakan sebagai cache dan session store.
Laravel sendiri sudah menyediakan dukungan Redis, sehingga kita tidak perlu berinteraksi langsung dengan Redis untuk kebutuhan umum. Konfigurasi dapat dilakukan melalui environment variable, kemudian Redis bisa digunakan melalui API Laravel seperti Cache.
Apa Itu Redis di Laravel?
Redis adalah in-memory data store yang menyimpan data di memory sehingga proses membaca dan menulis data dapat dilakukan dengan sangat cepat.
Di Laravel, Redis dapat digunakan untuk beberapa kebutuhan, seperti:
- cache;
- session;
- queue;
- atomic locks;
- penyimpanan data sementara.
Salah satu penggunaan yang paling umum adalah menjadikan Redis sebagai cache untuk mengurangi query database yang berulang.
Contohnya:
use Illuminate\Support\Facades\Cache;
$products = Cache::remember(
'products.latest',
600,
fn () => Product::latest()->get()
);
Jika cache masih tersedia, Laravel mengambil data dari Redis tanpa menjalankan query database kembali.
Mengapa Menggunakan Redis untuk Laravel?
Database memang dapat digunakan untuk menyimpan cache, tetapi Redis memiliki karakteristik yang lebih cocok untuk data sementara yang membutuhkan akses cepat.
Beberapa keuntungan Redis:
- Cepat karena data terutama diproses di memory.
- Mengurangi beban database ketika digunakan sebagai cache.
- Cocok untuk aplikasi multi-server karena cache dapat disimpan pada Redis yang sama.
- Mendukung berbagai kebutuhan Laravel, termasuk cache, session, queue, dan locking.
- Mudah digunakan melalui API Laravel tanpa harus menulis operasi Redis secara manual.
Namun, Redis bukan berarti harus digunakan untuk semua data aplikasi. Database tetap menjadi tempat utama untuk data yang membutuhkan persistence dan konsistensi sebagai sumber data utama.
Persiapan Redis untuk Laravel
Sebelum menggunakan Redis di Laravel, pastikan Redis sudah terinstall dan dapat diakses oleh aplikasi.
Jika Anda menggunakan Ubuntu, ikuti panduan Cara Install Redis di Ubuntu untuk Laravel untuk menginstall Redis dan memastikan servicenya berjalan.
Setelah Redis siap, pastikan Anda memiliki informasi koneksi berikut:
Host: 127.0.0.1
Port: 6379
Jika Redis berjalan pada server yang sama dengan Laravel, 127.0.0.1 biasanya dapat digunakan sebagai host.
Untuk server terpisah, sesuaikan host dengan alamat Redis yang digunakan.
Selanjutnya, konfigurasi koneksi Redis pada file .env Laravel:
REDIS_CLIENT=phpredis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
Setelah konfigurasi diubah, bersihkan konfigurasi Laravel:
php artisan config:clear
Redis sekarang siap digunakan oleh Laravel, misalnya sebagai cache, session store, atau queue backend.
Konfigurasi Redis di Laravel
Setelah Redis tersedia, konfigurasi koneksi dapat diletakkan di file .env.
Contoh:
REDIS_CLIENT=phpredis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
Nilai tersebut harus disesuaikan dengan environment aplikasi.
Laravel kemudian menggunakan konfigurasi Redis yang terdapat pada config/database.php.
Untuk memastikan konfigurasi yang digunakan sesuai dengan environment, Anda dapat menjalankan:
php artisan config:clear
Setelah konfigurasi berubah, langkah ini membantu Laravel membaca kembali konfigurasi environment tanpa menggunakan konfigurasi cache lama.
Menggunakan Redis sebagai Cache Laravel
Setelah Redis dikonfigurasi, kita dapat menggunakannya sebagai cache store.
Atur default cache store pada .env sesuai konfigurasi versi Laravel yang digunakan.
Kemudian gunakan API cache Laravel seperti biasa:
use Illuminate\Support\Facades\Cache;
$products = Cache::remember(
'products.latest',
600,
fn () => Product::latest()->get()
);
Pada contoh tersebut, Laravel akan:
- mencari
products.latestdi cache; - mengembalikan data jika cache tersedia;
- menjalankan query jika cache belum tersedia;
- menyimpan hasil query ke cache;
- mengembalikan hasil kepada aplikasi.
Untuk menghapus cache:
Cache::forget('products.latest');
Ini penting ketika data produk berubah dan cache tidak boleh lagi digunakan.
Menggunakan Redis Secara Langsung
Untuk kebutuhan tertentu, Laravel juga menyediakan Redis facade.
Contohnya:
use Illuminate\Support\Facades\Redis;
Redis::set('app:name', 'Laravel Redis');
$name = Redis::get('app:name');
Tetapi untuk kebutuhan caching biasa, penggunaan Cache biasanya lebih disarankan karena aplikasi tidak terlalu bergantung pada implementasi Redis secara langsung.
Dengan Cache, kode aplikasi tetap menggunakan abstraction Laravel:
Cache::put('key', 'value', 600);
Jika suatu saat strategi penyimpanan berubah, kode aplikasi tidak perlu bergantung langsung pada command Redis.
Laravel Redis untuk Session
Redis juga dapat digunakan sebagai tempat penyimpanan session.
Pada .env, konfigurasi session dapat diarahkan ke Redis sesuai konfigurasi Laravel yang digunakan:
SESSION_DRIVER=redis
Setelah itu, session Laravel dapat digunakan seperti biasa:
session(['cart_id' => 123]);
Kemudian mengambilnya:
$cartId = session('cart_id');
Penggunaan Redis untuk session cukup menarik untuk aplikasi yang berjalan pada beberapa server karena session dapat disimpan pada storage yang dapat diakses bersama.
Tanpa shared session storage, pengguna bisa mengalami masalah ketika request berikutnya diarahkan ke server yang berbeda dan server tersebut tidak memiliki session lokal yang sama.
Redis Cache vs Database Cache
Keduanya dapat digunakan sebagai cache store, tetapi karakteristiknya berbeda.
| Redis | Database | |
|---|---|---|
| Penyimpanan | Memory | Database |
| Kecepatan | Sangat cepat | Relatif lebih lambat |
| Beban database | Lebih rendah | Tetap menggunakan database |
| Multi-server | Cocok | Cocok |
| Use case | Cache, session, queue | Cache sederhana |
Untuk aplikasi Laravel yang memiliki traffic cukup tinggi atau membutuhkan shared cache, Redis biasanya menjadi pilihan yang lebih menarik.
Namun, pemilihan Redis tetap harus mempertimbangkan infrastruktur dan kebutuhan aplikasi. Tidak semua aplikasi membutuhkan Redis.
Best Practice Menggunakan Redis di Laravel
Ada beberapa hal yang sebaiknya diperhatikan ketika menggunakan Redis.
Gunakan Redis untuk data yang tepat
Redis sangat cocok untuk data sementara seperti cache dan session. Jangan menjadikan Redis sebagai pengganti database utama tanpa memahami kebutuhan persistence dan durability.
Gunakan cache key yang jelas
Hindari key seperti:
data
Lebih baik:
products.latest
products.category.10
user.123.dashboard
Cache key yang jelas memudahkan proses debugging dan invalidasi.
Tentukan TTL
Jangan menyimpan semua cache tanpa batas waktu.
Contoh:
Cache::remember(
'products.latest',
600,
fn () => Product::latest()->get()
);
TTL harus disesuaikan dengan seberapa sering data berubah.
Jangan cache data sensitif sembarangan
Untuk data yang berkaitan dengan user, tenant, permission, atau authentication, pastikan cache key tidak membuat data seorang pengguna dapat dikembalikan kepada pengguna lain.
Monitor Redis
Pada production, perhatikan penggunaan memory, jumlah key, eviction, latency, dan koneksi Redis.
Redis yang kehabisan memory atau mengalami masalah koneksi tetap dapat memengaruhi aplikasi Laravel.
Apakah Laravel Wajib Menggunakan Redis?
Tidak.
Laravel dapat menggunakan beberapa cache store dan Redis hanyalah salah satu pilihan.
Jika aplikasi masih kecil dan kebutuhan caching sederhana, menggunakan Redis mungkin belum memberikan keuntungan yang signifikan dibandingkan kompleksitas tambahan pada infrastructure.
Redis mulai menjadi pilihan menarik ketika aplikasi membutuhkan:
- cache berkecepatan tinggi;
- shared cache antar-server;
- session terpusat;
- queue backend;
- atomic locks;
- atau workload yang membutuhkan akses data sementara dengan latency rendah.
Jadi, gunakan Redis berdasarkan kebutuhan aplikasi, bukan hanya karena Redis populer.
FAQ Laravel Redis
Apa fungsi Redis di Laravel?
Redis dapat digunakan Laravel sebagai cache, session store, queue backend, atomic lock, dan kebutuhan penyimpanan data sementara lainnya.
Apakah Redis lebih cepat daripada database?
Untuk workload yang sesuai, Redis umumnya dapat memberikan akses data dengan latency lebih rendah karena data disimpan dan diproses terutama di memory. Namun, performa aktual tetap bergantung pada konfigurasi, workload, jaringan, dan implementasi aplikasi.
Apakah Laravel bisa menggunakan Redis untuk cache?
Ya. Laravel menyediakan dukungan Redis sebagai cache store sehingga aplikasi dapat menggunakan API seperti Cache::get(), Cache::put(), dan Cache::remember().
Apakah Redis harus digunakan di production?
Tidak. Redis bukan persyaratan Laravel. Penggunaannya bergantung pada kebutuhan aplikasi dan arsitektur infrastructure.
Apakah Redis bisa digunakan untuk session Laravel?
Ya. Laravel dapat menggunakan Redis sebagai session store, yang sangat berguna terutama untuk aplikasi yang berjalan pada beberapa server.
Kesimpulan
Redis merupakan pilihan yang sangat berguna untuk aplikasi Laravel yang membutuhkan caching dan penyimpanan session dengan akses cepat.
Untuk penggunaan sehari-hari, Anda tidak harus berinteraksi langsung dengan Redis. Laravel sudah menyediakan abstraction melalui Cache, sehingga implementasinya tetap sederhana:
$data = Cache::remember(
'products.latest',
600,
fn () => Product::latest()->get()
);
Yang paling penting bukan sekadar menggunakan Redis, tetapi menentukan data apa yang perlu di-cache, berapa lama cache berlaku, dan kapan cache harus dihapus.
Jika aplikasi mulai memiliki traffic tinggi, berjalan pada beberapa server, atau membutuhkan cache dan session terpusat, Redis dapat menjadi salah satu komponen penting dalam arsitektur Laravel.
