Spaces:
Runtime error
Runtime error
| # Redis Setup Guide for Chat Agent | |
| ## Why Redis is Used | |
| The chat agent uses Redis for several performance and scalability benefits: | |
| 1. **Session Caching** - Fast access to frequently used session data | |
| 2. **Chat History Caching** - Quick retrieval of recent messages | |
| 3. **Rate Limiting** - Distributed rate limiting across multiple app instances | |
| 4. **User Session Tracking** - Managing multiple sessions per user | |
| ## Error 10061 Explanation | |
| **Error 10061 connecting to localhost:6379** means: | |
| - Port 6379 is Redis's default port | |
| - No Redis server is running on your machine | |
| - The application can't connect to Redis for caching | |
| ## Installation Options | |
| ### Option 1: Windows Native Installation | |
| 1. **Download Redis for Windows:** | |
| - Visit: https://github.com/microsoftarchive/redis/releases | |
| - Download the latest `.msi` installer | |
| - Run the installer and follow the setup wizard | |
| 2. **Start Redis:** | |
| ```cmd | |
| # Redis should start automatically after installation | |
| # Or manually start it: | |
| redis-server | |
| ``` | |
| 3. **Verify Installation:** | |
| ```cmd | |
| redis-cli ping | |
| # Should return: PONG | |
| ``` | |
| ### Option 2: Using Chocolatey (Windows) | |
| ```cmd | |
| # Install Chocolatey first if you don't have it | |
| # Then install Redis: | |
| choco install redis-64 | |
| # Start Redis | |
| redis-server | |
| # Test connection | |
| redis-cli ping | |
| ``` | |
| ### Option 3: Using Docker (Recommended) | |
| ```bash | |
| # Pull and run Redis container | |
| docker run -d -p 6379:6379 --name redis redis:alpine | |
| # Verify it's running | |
| docker ps | |
| # Test connection | |
| docker exec -it redis redis-cli ping | |
| ``` | |
| ### Option 4: WSL/Linux | |
| ```bash | |
| # Update package list | |
| sudo apt update | |
| # Install Redis | |
| sudo apt install redis-server | |
| # Start Redis service | |
| sudo systemctl start redis-server | |
| # Enable auto-start on boot | |
| sudo systemctl enable redis-server | |
| # Test connection | |
| redis-cli ping | |
| ``` | |
| ## Configuration | |
| ### Environment Variables | |
| Create a `.env` file in your project root: | |
| ```env | |
| # Redis Configuration | |
| REDIS_URL=redis://localhost:6379/0 | |
| REDIS_HOST=localhost | |
| REDIS_PORT=6379 | |
| REDIS_DB=0 | |
| REDIS_PASSWORD= | |
| # For production with password: | |
| # REDIS_URL=redis://:password@localhost:6379/0 | |
| # REDIS_PASSWORD=your-secure-password | |
| ``` | |
| ### Testing Configuration | |
| For testing without Redis, set: | |
| ```env | |
| REDIS_URL=None | |
| ``` | |
| Or use the testing configuration which automatically disables Redis. | |
| ## Running Without Redis | |
| The application is designed to work without Redis, but with reduced performance: | |
| ### What Works Without Redis: | |
| - ✅ All API endpoints function normally | |
| - ✅ Session management (database-only) | |
| - ✅ Chat history (database-only) | |
| - ✅ Language context management | |
| - ✅ Authentication and authorization | |
| ### What's Affected Without Redis: | |
| - ⚠️ **Performance**: Slower session and message retrieval | |
| - ⚠️ **Rate Limiting**: Uses in-memory storage (not distributed) | |
| - ⚠️ **Caching**: No caching layer, all requests hit the database | |
| - ⚠️ **Scalability**: Cannot scale across multiple app instances | |
| ### Performance Impact: | |
| - Session retrieval: ~50-100ms slower per request | |
| - Chat history: ~100-200ms slower for large histories | |
| - Rate limiting: Resets when app restarts | |
| ## Production Recommendations | |
| ### Redis Configuration for Production: | |
| 1. **Use a dedicated Redis instance** | |
| 2. **Enable password authentication** | |
| 3. **Configure persistence** (RDB + AOF) | |
| 4. **Set up monitoring** | |
| 5. **Use Redis Cluster** for high availability | |
| ### Example Production Config: | |
| ```env | |
| # Production Redis with authentication | |
| REDIS_URL=redis://:your-secure-password@redis-server:6379/0 | |
| REDIS_PASSWORD=your-secure-password | |
| # Connection pool settings | |
| REDIS_MAX_CONNECTIONS=20 | |
| REDIS_SOCKET_TIMEOUT=5 | |
| REDIS_SOCKET_CONNECT_TIMEOUT=5 | |
| ``` | |
| ## Troubleshooting | |
| ### Common Issues: | |
| 1. **"Connection refused" (Error 10061)** | |
| - Redis server is not running | |
| - Wrong host/port configuration | |
| - Firewall blocking the connection | |
| 2. **"Authentication failed"** | |
| - Wrong password in REDIS_URL | |
| - Redis configured with auth but no password provided | |
| 3. **"Connection timeout"** | |
| - Network issues | |
| - Redis server overloaded | |
| - Wrong host address | |
| ### Debug Commands: | |
| ```bash | |
| # Check if Redis is running | |
| redis-cli ping | |
| # Check Redis info | |
| redis-cli info | |
| # Monitor Redis commands | |
| redis-cli monitor | |
| # Check specific database | |
| redis-cli -n 0 keys "*" | |
| ``` | |
| ## Development vs Production | |
| ### Development (Local): | |
| ```env | |
| REDIS_URL=redis://localhost:6379/0 | |
| ``` | |
| ### Testing (No Redis): | |
| ```env | |
| REDIS_URL=None | |
| ``` | |
| ### Production (Managed Redis): | |
| ```env | |
| REDIS_URL=redis://:password@your-redis-host:6379/0 | |
| ``` | |
| ## Cloud Redis Services | |
| For production, consider managed Redis services: | |
| - **AWS ElastiCache** | |
| - **Google Cloud Memorystore** | |
| - **Azure Cache for Redis** | |
| - **Redis Cloud** | |
| - **DigitalOcean Managed Redis** | |
| These provide: | |
| - Automatic backups | |
| - High availability | |
| - Monitoring and alerts | |
| - Security and compliance | |
| - Automatic scaling | |
| ## Summary | |
| The **Error 10061** occurs because Redis is not installed or running. You have three options: | |
| 1. **Install Redis** (recommended for development/production) | |
| 2. **Use Docker** to run Redis (easiest setup) | |
| 3. **Run without Redis** (works but with performance impact) | |
| The application gracefully handles Redis being unavailable and will continue to function using database-only operations. |