181 lines
4.2 KiB
Markdown
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
|
|
```
|