scratch_chat / REDIS_SETUP.md
WebashalarForML's picture
Upload 178 files
330b6e4 verified
# 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.