Setup Redis untuk Queue dan Cache Laravel

Redis di Laravel biasanya dipakai untuk mempercepat cache dan memproses queue dengan lebih stabil. Jawaban cepatnya: install Redis server, pasang ekstensi atau client Redis untuk PHP, isi .env, ubah CACHE_STORE dan QUEUE_CONNECTION, lalu jalankan queue worker dengan Supervisor.

Untuk pemula, Redis tidak wajib di semua project. Project kecil bisa mulai dari cache file dan queue database. Redis mulai berguna ketika aplikasi punya banyak job, cache sering dibaca, session aktif, atau traffic sudah lebih serius.

Kapan Perlu Redis?

Pertimbangkan Redis jika project kamu:

  • memproses banyak job queue
  • memakai cache untuk data yang sering dibaca
  • punya fitur notifikasi, email massal, import, atau export
  • butuh session yang lebih mudah dibagikan antar server
  • ingin queue lebih cepat dibanding database queue
  • mulai lambat karena query yang sama diulang terus

Untuk belajar production, Redis juga bagus karena memperkenalkan komponen server yang umum dipakai aplikasi Laravel nyata.

Gambaran Peran Redis

Redis adalah penyimpanan data di memory. Di Laravel, Redis sering dipakai sebagai:

KebutuhanContoh penggunaan
Cachemenyimpan hasil query mahal sementara
Queuemenyimpan antrean job background
Sessionmenyimpan session user
Rate limitmembatasi request API

Jangan anggap Redis sebagai pengganti database utama. Data penting seperti user, order, invoice, dan transaksi tetap disimpan di database seperti MySQL atau PostgreSQL.

Install Redis di Server

Di Ubuntu/Debian:

sudo apt update
sudo apt install redis-server
sudo systemctl enable redis-server
sudo systemctl start redis-server

Cek status:

sudo systemctl status redis-server
redis-cli ping

Jika sehat, redis-cli ping mengembalikan:

PONG

Siapkan Client Redis untuk Laravel

Laravel bisa memakai ekstensi PHP Redis atau package Predis. Untuk server production, ekstensi PHP Redis umum dipakai.

Install ekstensi sesuai versi PHP server:

sudo apt install php8.3-redis
sudo systemctl restart php8.3-fpm

Cek ekstensi:

php -m | grep redis

Jika kamu tidak bisa memasang ekstensi, alternatifnya pakai Predis:

composer require predis/predis

Lalu sesuaikan konfigurasi client di project jika diperlukan.

Konfigurasi .env

Contoh .env sederhana:

REDIS_CLIENT=phpredis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

CACHE_STORE=redis
QUEUE_CONNECTION=redis
SESSION_DRIVER=redis

Jika project memakai versi Laravel yang masih memakai CACHE_DRIVER, ikuti key di .env.example project tersebut. Jangan mencampur nama key dari banyak versi tanpa mengecek konfigurasi project.

Setelah mengubah .env:

php artisan config:clear
php artisan config:cache

Untuk checklist environment lain, baca Laravel .env Production: Checklist Aman.

Contoh Cache dengan Redis

Kode Laravel tetap memakai facade cache biasa. Kamu tidak perlu memanggil Redis langsung untuk kasus sederhana.

<?php

use App\Models\Product;
use Illuminate\Support\Facades\Cache;

$products = Cache::remember('homepage-products', now()->addMinutes(10), function () {
    return Product::query()
        ->latest()
        ->take(8)
        ->get();
});

Jika CACHE_STORE=redis, data cache ini disimpan di Redis. Jika nanti ingin kembali ke file, kode aplikasi tidak perlu berubah.

Contoh Queue dengan Redis

Setelah QUEUE_CONNECTION=redis, job yang di-dispatch akan masuk Redis:

<?php

use App\Jobs\KirimEmailInvoice;

KirimEmailInvoice::dispatch($invoice);

Worker tetap dijalankan dengan perintah Laravel:

php artisan queue:work redis --sleep=3 --tries=3 --max-time=3600

Di production, jangan menjalankan worker manual dari terminal. Gunakan Supervisor untuk Queue Laravel.

Contoh bagian command Supervisor:

command=php /var/www/toko-laravel/artisan queue:work redis --sleep=3 --tries=3 --max-time=3600

Setelah deploy kode baru:

php artisan queue:restart

Cara Mengecek Redis Dipakai

Test koneksi dari Laravel:

php artisan tinker

Lalu:

Cache::put('cek-redis', 'jalan', 60);
Cache::get('cek-redis');

Cek dari Redis CLI:

redis-cli keys '*cek-redis*'

Untuk queue, dispatch satu job kecil, lalu cek:

php artisan queue:failed
sudo supervisorctl status

Jangan terlalu sering memakai keys * di production besar karena bisa berat. Untuk aplikasi kecil dan debugging awal, perintah ini masih cukup membantu.

Kesalahan yang Sering Terjadi

Redis Server Belum Jalan

Jika Laravel tidak bisa terhubung, cek:

sudo systemctl status redis-server
redis-cli ping

Pastikan service aktif sebelum mengubah kode Laravel.

Ekstensi PHP Redis Belum Terpasang

Jika REDIS_CLIENT=phpredis tetapi ekstensi belum ada, Laravel bisa error. Cek dengan:

php -m | grep redis

Jika tidak ada output, install ekstensi atau gunakan Predis.

Lupa Menjalankan Worker

Mengubah QUEUE_CONNECTION=redis tidak otomatis memproses job. Queue tetap butuh worker yang hidup terus.

Cache Lama Membuat Perubahan Tidak Terbaca

Setelah mengubah .env, jalankan:

php artisan config:clear
php artisan config:cache

Kalau masih debugging, gunakan config:clear dulu agar nilai terbaru terbaca langsung.

Redis Dibuka ke Internet

Untuk setup sederhana, Redis sebaiknya hanya listen di 127.0.0.1. Jangan membuka port Redis publik tanpa keamanan yang benar.

Pencegahan

  1. Mulai dari queue database jika project masih kecil.
  2. Pakai Redis saat kebutuhan queue/cache sudah jelas.
  3. Pastikan Redis hanya bisa diakses dari server yang perlu.
  4. Jalankan queue worker dengan Supervisor.
  5. Pantau failed job setelah pindah ke Redis.
  6. Dokumentasikan perubahan .env dan service server.

Bacaan Terkait

FAQ

Apakah Laravel wajib memakai Redis?

Tidak. Redis berguna untuk cache, queue, session, dan rate limit, tetapi project kecil bisa berjalan dengan driver file atau database.

Lebih baik Redis queue atau database queue?

Database queue lebih mudah untuk awal. Redis queue biasanya lebih cepat dan lebih cocok saat job mulai banyak.

Apakah Redis menggantikan MySQL?

Tidak. Redis dipakai untuk data sementara, antrean, cache, atau session. Data utama aplikasi tetap disimpan di database relasional.

Kenapa job masuk Redis tetapi tidak diproses?

Biasanya worker belum berjalan, Supervisor belum dikonfigurasi, atau worker memakai queue connection yang berbeda.

Apakah Redis aman tanpa password?

Bisa aman jika hanya listen di localhost dan tidak bisa diakses dari luar server. Untuk setup lebih kompleks, gunakan proteksi tambahan sesuai kebutuhan infrastruktur.