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:

  1. Redis belum berjalan.
  2. Host atau port Redis di .env salah.
  3. Laravel berjalan di Docker, tetapi menggunakan 127.0.0.1 untuk mengakses container Redis.
  4. Port Redis belum terbuka atau tidak sesuai.
  5. Konfigurasi Redis Laravel masih menggunakan nilai lama karena cache konfigurasi.
  6. Redis hanya listen pada interface tertentu.
  7. 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_HOST
  • REDIS_PORT
  • REDIS_PASSWORD
  • REDIS_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:

  1. Pastikan Redis aktif.
  2. Tes dengan redis-cli ping.
  3. Periksa REDIS_HOST dan REDIS_PORT.
  4. Jika menggunakan Docker, gunakan nama service Redis, bukan 127.0.0.1.
  5. Bersihkan cache konfigurasi Laravel.
  6. Jika Redis berada di server lain, periksa firewall, port, dan konfigurasi bind.
  7. Periksa config/database.php jika masalah belum terselesaikan.

Dalam banyak kasus, kombinasi Redis aktif + konfigurasi host yang benar + php artisan optimize:clear sudah cukup untuk mengatasi error ini.