Laravel Connection Refused Redis: Penyebab dan Cara Mengatasinya
Laravel Connection Refused Redis: Apa Penyebabnya?
Error Connection refused pada Redis di Laravel berarti aplikasi Laravel berhasil mencoba menghubungi alamat Redis, tetapi koneksi ke server Redis ditolak.
Penyebab yang paling sering adalah:
- Redis belum berjalan.
- Host atau port Redis di
.envsalah. - Laravel berjalan di Docker, tetapi menggunakan
127.0.0.1untuk mengakses container Redis. - Port Redis belum terbuka atau tidak sesuai.
- Konfigurasi Redis Laravel masih menggunakan nilai lama karena cache konfigurasi.
- Redis hanya listen pada interface tertentu.
- Service Redis mengalami masalah atau berhenti.
Solusi tercepat: pastikan Redis aktif, periksa REDIS_HOST dan REDIS_PORT, lalu bersihkan cache konfigurasi Laravel.
1. Pastikan Redis Sedang Berjalan
Langkah pertama adalah memastikan service Redis benar-benar aktif.
Di Linux, jalankan:
sudo systemctl status redis
Pada beberapa distribusi, nama servicenya dapat berupa redis-server:
sudo systemctl status redis-server
Jika Redis belum aktif, jalankan:
sudo systemctl start redis
Kemudian tes koneksi:
redis-cli ping
Jika Redis berjalan normal, hasilnya:
PONG
Jika redis-cli ping juga menghasilkan Connection refused, masalahnya kemungkinan berada pada service Redis, bukan Laravel.
2. Periksa Konfigurasi Redis di File .env
Laravel biasanya mengambil konfigurasi Redis dari environment variable.
Periksa bagian berikut:
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
Port default Redis adalah 6379.
Jika Redis berada di server yang berbeda, REDIS_HOST harus menggunakan hostname atau IP server Redis yang benar.
Contoh:
REDIS_HOST=192.168.1.20
REDIS_PORT=6379
Jangan langsung mengubah port tanpa memastikan Redis memang berjalan pada port tersebut.
Anda dapat memeriksa port Redis dengan:
sudo ss -lntp | grep 6379
3. Jika Menggunakan Docker, Jangan Gunakan 127.0.0.1 Secara Sembarangan
Ini adalah salah satu penyebab paling umum error Redis pada Laravel yang berjalan di Docker.
Misalnya terdapat dua container:
laravel-app
redis
Jika Laravel berada di container laravel-app, maka:
REDIS_HOST=127.0.0.1
berarti Laravel mencoba mencari Redis di dalam container Laravel itu sendiri, bukan di container redis.
Gunakan nama service Redis pada Docker Compose:
REDIS_HOST=redis
REDIS_PORT=6379
Contoh konfigurasi:
services:
app:
build: .
depends_on:
- redis
redis:
image: redis:alpine
Dalam konfigurasi tersebut, redis menjadi hostname yang dapat digunakan oleh container Laravel.
Setelah mengubah .env, jangan lupa membersihkan konfigurasi Laravel.
4. Bersihkan Cache Konfigurasi Laravel
Perubahan .env tidak selalu langsung digunakan apabila konfigurasi Laravel sudah di-cache.
Jalankan:
php artisan config:clear
Jika ingin membangun ulang cache konfigurasi:
php artisan config:cache
Untuk memastikan Laravel tidak menggunakan konfigurasi lama, Anda juga dapat menjalankan:
php artisan optimize:clear
Kemudian coba kembali operasi yang sebelumnya menghasilkan error Redis.
5. Periksa config/database.php
Jika .env sudah benar tetapi error tetap muncul, periksa konfigurasi Redis Laravel.
Contoh konfigurasi:
'redis' => [
'client' => env('REDIS_CLIENT', 'phpredis'),
'default' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'username' => env('REDIS_USERNAME'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', 6379),
'database' => env('REDIS_DB', 0),
],
],
Perhatikan terutama:
REDIS_HOSTREDIS_PORTREDIS_PASSWORDREDIS_URL- Redis client yang digunakan
Jika aplikasi menggunakan REDIS_URL, pastikan nilainya tidak mengarah ke server atau port yang salah.
6. Cek Apakah Redis Bisa Diakses dari Server Laravel
Jika Redis berada di server berbeda, jangan hanya mengetes Redis dari server Redis. Tes juga dari server tempat Laravel berjalan.
Misalnya:
redis-cli -h 192.168.1.20 -p 6379 ping
Jika hasilnya:
PONG
berarti server Laravel dapat menjangkau Redis.
Jika hasilnya:
Could not connect to Redis
Connection refused
periksa:
- Redis sedang berjalan.
- Redis listen pada IP yang benar.
- Port 6379 tidak diblokir firewall.
- Konfigurasi jaringan Docker atau server sudah benar.
7. Periksa Konfigurasi bind Redis
Redis dapat dikonfigurasi agar hanya menerima koneksi dari interface tertentu.
Periksa konfigurasi Redis, misalnya:
sudo nano /etc/redis/redis.conf
Cari konfigurasi:
bind 127.0.0.1
Jika Redis harus menerima koneksi dari server lain, konfigurasi bind perlu disesuaikan dengan arsitektur jaringan Anda.
Jangan membuka Redis ke internet secara sembarangan. Redis sebaiknya ditempatkan pada jaringan privat dan dilindungi dengan konfigurasi autentikasi serta firewall yang sesuai.
Setelah perubahan konfigurasi, restart Redis:
sudo systemctl restart redis
Lalu tes kembali:
redis-cli ping
8. Jika Menggunakan Queue, Cache, atau Session Redis
Error Redis tidak selalu muncul ketika kode aplikasi secara eksplisit memanggil Redis.
Laravel dapat menggunakan Redis untuk berbagai kebutuhan, misalnya:
CACHE_STORE=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redis
Artinya, aplikasi bisa gagal ketika:
- menyimpan cache,
- membaca session,
- menjalankan queue,
- atau menjalankan fitur lain yang bergantung pada Redis.
Jika error muncul setelah mengubah salah satu konfigurasi tersebut, periksa kembali koneksi Redis sebelum mencari masalah pada kode aplikasi.
9. Cara Mengetahui Sumber Masalah dengan Cepat
Gunakan urutan troubleshooting berikut:
Redis lokal
redis-cli ping
Jika PONG → Redis aktif.
Jika Connection refused → perbaiki service Redis terlebih dahulu.
Periksa konfigurasi Laravel
php artisan about
Kemudian periksa .env:
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
Bersihkan cache
php artisan optimize:clear
Jika menggunakan Docker
Pastikan:
REDIS_HOST=redis
bukan:
REDIS_HOST=127.0.0.1
jika Redis berada pada container terpisah.
Tes koneksi dari environment Laravel
Untuk Docker, masuk ke container aplikasi:
docker compose exec app sh
Kemudian tes koneksi ke service Redis:
redis-cli -h redis ping
Jika menghasilkan:
PONG
jaringan antara container aplikasi dan Redis sudah berfungsi.
FAQ Laravel Connection Refused Redis
Apa arti Connection refused pada Redis di Laravel?
Connection refused berarti Laravel mencoba terhubung ke Redis, tetapi koneksi ditolak oleh alamat dan port tujuan. Biasanya Redis tidak berjalan, host atau port salah, atau Redis tidak menerima koneksi dari aplikasi.
Berapa port default Redis?
Port default Redis adalah 6379, kecuali konfigurasi Redis Anda menggunakan port berbeda.
Mengapa Laravel Docker tidak bisa terhubung ke Redis dengan 127.0.0.1?
Karena 127.0.0.1 dari dalam container Laravel menunjuk ke container Laravel itu sendiri. Jika Redis berada di container lain, gunakan nama service Docker, misalnya REDIS_HOST=redis.
Apakah perubahan .env Laravel langsung berlaku?
Tidak selalu. Jika konfigurasi Laravel telah di-cache, jalankan:
php artisan optimize:clear
atau minimal:
php artisan config:clear
Bagaimana cara memastikan Redis sudah aktif?
Jalankan:
redis-cli ping
Jika Redis dapat menerima koneksi, respons normalnya adalah:
PONG
Kesimpulan
Error Laravel Connection Refused Redis umumnya bukan masalah pada kode Laravel, melainkan masalah koneksi antara aplikasi dan Redis.
Urutan pemeriksaan yang paling efektif adalah:
- Pastikan Redis aktif.
- Tes dengan
redis-cli ping. - Periksa
REDIS_HOSTdanREDIS_PORT. - Jika menggunakan Docker, gunakan nama service Redis, bukan
127.0.0.1. - Bersihkan cache konfigurasi Laravel.
- Jika Redis berada di server lain, periksa firewall, port, dan konfigurasi
bind. - Periksa
config/database.phpjika masalah belum terselesaikan.
Dalam banyak kasus, kombinasi Redis aktif + konfigurasi host yang benar + php artisan optimize:clear sudah cukup untuk mengatasi error ini.
