Files
CKB/REDIS-FIX-GUIDE.md

5.7 KiB

🔴 Redis Fix Guide untuk Laravel Docker

🎯 Masalah yang Diselesaikan

Error yang dialami:

Class "Redis" not found

Root Cause:

  • PHP Redis extension tidak terinstall di container
  • Laravel dikonfigurasi untuk menggunakan Redis tetapi extension tidak tersedia
  • Container perlu rebuild untuk install Redis extension

🚀 Solusi yang Diimplementasi

1. Updated Dockerfiles

Production (Dockerfile):

# Install Redis extension
RUN pecl install redis \
    && docker-php-ext-enable redis

Development (Dockerfile.dev):

# Install Redis and Xdebug for development
RUN pecl install redis xdebug \
    && docker-php-ext-enable redis xdebug

2. Fix Steps yang Dijalankan

# 1. Update Dockerfile dengan Redis extension
# 2. Rebuild container
docker-compose build --no-cache app

# 3. Restart container dengan image baru
docker-compose up -d app

# 4. Verify Redis extension installed
docker-compose exec app php -m | grep redis

# 5. Test Redis connection
docker-compose exec app php -r "
    \$redis = new Redis();
    \$redis->connect('redis', 6379);
    echo 'Redis connected successfully';
"

# 6. Clear Laravel cache
docker-compose exec app php artisan config:clear
docker-compose exec app php artisan cache:clear

Verifikasi Fix Berhasil

1. PHP Redis Extension

# Cek extension terinstall
docker-compose exec app php -m | grep redis
# Output: redis

2. Redis Connection Test

# Test koneksi Redis
./docker-test-redis.sh dev

Expected Output:

[SUCCESS] PHP Redis extension is installed
[SUCCESS] Redis server is responding  
[SUCCESS] PHP Redis connection working
[SUCCESS] Laravel cache operations working

3. Web Application

# Test web response
curl -s -o /dev/null -w "%{http_code}" http://localhost:8000/
# Output: 302 (redirect ke login page)

4. Laravel Cache Operations

# Test Laravel cache dengan Redis
docker-compose exec app php artisan tinker --execute="
    Cache::put('test', 'redis-working', 60);
    echo Cache::get('test');
"
# Output: redis-working

🛠️ Tools dan Scripts

docker-test-redis.sh

Comprehensive Redis testing script:

  • Test PHP Redis extension
  • Test Redis server connection
  • Test Laravel cache operations
  • Show Redis configuration
  • Show server information

Usage:

# Test development environment
./docker-test-redis.sh dev

# Test production environment  
./docker-test-redis.sh prod

docker-rebuild.sh

Updated untuk include Redis testing:

  • Test Redis extension di build process
  • Verify Redis connection setelah rebuild
  • Comprehensive testing semua extensions

🔧 Laravel Configuration

Environment Variables (.env)

# Redis Configuration
REDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PORT=6379

# Cache using Redis
CACHE_DRIVER=redis

# Sessions using Redis  
SESSION_DRIVER=redis

# Queue using Redis
QUEUE_CONNECTION=redis

Config Files

Laravel otomatis membaca konfigurasi dari environment variables untuk:

  • config/cache.php - Cache driver
  • config/session.php - Session driver
  • config/queue.php - Queue driver
  • config/database.php - Redis connection

🚨 Common Issues & Solutions

1. Redis Extension Missing

Symptoms: Class "Redis" not found Solution:

# Rebuild containers
./docker-rebuild.sh dev

2. Redis Connection Failed

Symptoms: Connection refused Solution:

# Check Redis container
docker-compose ps | grep redis

# Restart Redis
docker-compose restart redis

# Test connection
./docker-test-redis.sh dev

3. Laravel Config Not Loading

Symptoms: Cache/session tidak menggunakan Redis Solution:

# Clear Laravel cache
docker-compose exec app php artisan config:clear
docker-compose exec app php artisan cache:clear
docker-compose exec app php artisan view:clear

4. Permission Issues with Redis

Symptoms: Cannot write to cache Solution:

# Fix permissions
./docker-fix-permissions.sh dev

# Clear cache
docker-compose exec app php artisan cache:clear

📋 Best Practices

1. Container Management

  • Always rebuild containers setelah update Dockerfile
  • Use scripts untuk consistent operations
  • Test functionality setelah changes

2. Development Workflow

# Complete setup dengan Redis
./docker-quick-setup.sh dev

# Test semua functionality
./docker-test-redis.sh dev

# Fix jika ada issues
./docker-fix-permissions.sh dev

3. Production Deployment

# Build production containers
./docker-rebuild.sh prod

# Verify Redis working
./docker-test-redis.sh prod

# Import database
./docker-import-db.sh prod

🔍 Monitoring & Debugging

Redis Monitoring

# Redis logs
docker-compose logs redis

# Redis CLI access
docker-compose exec redis redis-cli

# Redis info
docker-compose exec redis redis-cli info

# Monitor Redis commands
docker-compose exec redis redis-cli monitor

Laravel Debugging

# Check Laravel logs
docker-compose exec app tail -f storage/logs/laravel.log

# Check cache status
docker-compose exec app php artisan cache:table

# Test cache manually
docker-compose exec app php artisan tinker
# Cache::put('test', 'value', 60);
# Cache::get('test');

📈 Performance Tips

1. Redis Optimization

  • Use appropriate data types
  • Set proper expiration times
  • Monitor memory usage

2. Laravel Cache Strategy

# Cache configuration
php artisan config:cache

# Cache routes  
php artisan route:cache

# Cache views
php artisan view:cache

Dengan implementasi fix ini, masalah "Class Redis not found" sudah teratasi dan aplikasi Laravel berjalan normal dengan Redis.