Files
echoes-of-the-ash/REDIS_MONITORING.md
2025-11-27 16:27:01 +01:00

181 lines
4.2 KiB
Markdown

# Redis Cache Monitoring Guide
## Quick Methods to Monitor Redis Cache
### 1. **API Endpoint (Easiest)**
Access the cache stats endpoint:
```bash
# Using curl (replace with your auth token)
curl -H "Authorization: Bearer YOUR_TOKEN" http://localhost:8000/api/cache/stats
```
**Response:**
```json
{
"enabled": true,
"redis_stats": {
"total_commands_processed": 15234,
"ops_per_second": 12,
"connected_clients": 8
},
"cache_performance": {
"hits": 8542,
"misses": 1234,
"total_requests": 9776,
"hit_rate_percent": 87.38
},
"current_user": {
"inventory_cached": true,
"player_id": 1
}
}
```
**What to look for:**
- `hit_rate_percent`: Should be 70-90% for good cache performance
- `inventory_cached`: Shows if your inventory is currently in cache
- `ops_per_second`: Redis operations per second
---
### 2. **Redis CLI - Real-time Monitoring**
```bash
# Connect to Redis container
docker exec -it echoes_of_the_ashes_redis redis-cli
# View detailed statistics
INFO stats
# Monitor all commands in real-time (shows every cache hit/miss)
MONITOR
# View all inventory cache keys
KEYS player:*:inventory
# Check if specific player's inventory is cached
EXISTS player:1:inventory
# Get TTL (time to live) of a cached inventory
TTL player:1:inventory
# View cached inventory data
GET player:1:inventory
```
---
### 3. **Application Logs**
```bash
# View all cache-related logs
docker logs echoes_of_the_ashes_api -f | grep -i "redis\|cache"
# View only cache failures
docker logs echoes_of_the_ashes_api -f | grep "cache.*failed"
```
---
### 4. **Redis Commander (Web UI)**
Add Redis Commander to your docker-compose.yml for a web-based UI:
```yaml
redis-commander:
image: rediscommander/redis-commander:latest
environment:
- REDIS_HOSTS=local:echoes_of_the_ashes_redis:6379
ports:
- "8081:8081"
depends_on:
- echoes_of_the_ashes_redis
```
Then access: http://localhost:8081
---
## Understanding Cache Metrics
### Hit Rate
- **90%+**: Excellent - Most requests served from cache
- **70-90%**: Good - Cache is working well
- **50-70%**: Fair - Consider increasing TTL or investigating invalidation
- **<50%**: Poor - Cache may not be effective
### Inventory Cache Keys
- Format: `player:{player_id}:inventory`
- TTL: 600 seconds (10 minutes)
- Invalidated on: add/remove items, equip/unequip, property updates
### Expected Behavior
1. **First inventory load**: Cache MISS → Database query → Cache write
2. **Subsequent loads**: Cache HIT → Fast response (~1-3ms)
3. **After mutation** (pickup item): Cache invalidated → Next load is MISS
4. **After 10 minutes**: Cache expires → Next load is MISS
---
## Testing Cache Performance
### Test 1: Verify Caching Works
```bash
# 1. Load inventory (should be cache MISS)
curl -H "Authorization: Bearer TOKEN" http://localhost:8000/api/game/state
# 2. Load again immediately (should be cache HIT - much faster)
curl -H "Authorization: Bearer TOKEN" http://localhost:8000/api/game/state
# 3. Check stats
curl -H "Authorization: Bearer TOKEN" http://localhost:8000/api/cache/stats
```
### Test 2: Verify Invalidation Works
```bash
# 1. Load inventory (cache HIT if already loaded)
curl -H "Authorization: Bearer TOKEN" http://localhost:8000/api/game/state
# 2. Pick up an item (invalidates cache)
curl -X POST -H "Authorization: Bearer TOKEN" http://localhost:8000/api/game/pickup_item
# 3. Load inventory again (should be cache MISS)
curl -H "Authorization: Bearer TOKEN" http://localhost:8000/api/game/state
```
---
## Troubleshooting
### Cache Not Working
```bash
# Check if Redis is running
docker ps | grep redis
# Check Redis connectivity
docker exec -it echoes_of_the_ashes_redis redis-cli PING
# Should return: PONG
# Check application logs for errors
docker logs echoes_of_the_ashes_api | grep -i "redis"
```
### Low Hit Rate
- Check if cache TTL is too short (currently 10 minutes)
- Verify invalidation isn't too aggressive
- Monitor which operations are causing cache misses
### High Memory Usage
```bash
# Check Redis memory usage
docker exec -it echoes_of_the_ashes_redis redis-cli INFO memory
# View all cached keys
docker exec -it echoes_of_the_ashes_redis redis-cli KEYS "*"
# Clear all cache (use with caution!)
docker exec -it echoes_of_the_ashes_redis redis-cli FLUSHALL
```