mirror of
https://github.com/ipnet-mesh/meshcore-hub.git
synced 2026-08-08 18:02:50 +02:00
feat: add optional Redis caching layer for API endpoints
Add Redis-backed response caching for read-heavy API endpoints (nodes, advertisements, messages, channels, dashboard, profiles) with configurable TTL, key prefix isolation, and graceful fallback when Redis is unavailable. New files: - common/redis.py: CacheBackend, NullCache, RedisCacheBackend - api/cache.py: @cached decorator, sorted_query_string helper - tests/test_api/test_cache.py: 23 unit tests Changes: - pyproject.toml: add redis[hiredis] dependency - common/config.py: 8 Redis settings on APISettings - api/cli.py: Redis Click options + startup banner - api/app.py: Redis lifespan init/cleanup, X-Cache middleware, health check - 6 route files: apply @cached decorator to list endpoints - docker-compose.yml: Redis service (cache profile), env vars - docker-compose.dev.yml: Redis port exposure - .env.example, README.md, AGENTS.md, docs/upgrading.md: documentation Redis is disabled by default (REDIS_ENABLED=false). Enable with --profile cache and REDIS_ENABLED=true.
This commit is contained in:
@@ -370,6 +370,32 @@ The collector automatically cleans up old event data and inactive nodes:
|
||||
| `METRICS_CACHE_TTL` | `60` | Seconds to cache metrics output (reduces database load) |
|
||||
| `CORS_ORIGINS` | _(none)_ | Comma-separated list of allowed CORS origins for the API (optional, only needed when the web dashboard runs on a different origin) |
|
||||
|
||||
### Redis Caching
|
||||
|
||||
Optional Redis-backed caching for API responses. When disabled or unavailable, the API queries the database directly.
|
||||
|
||||
**Docker:** Redis is included in the `cache` profile. Disabled by default — set `REDIS_ENABLED=true` to enable.
|
||||
|
||||
```bash
|
||||
docker compose --profile cache up # Start with bundled Redis
|
||||
docker compose --profile core up # Start without Redis
|
||||
```
|
||||
|
||||
**Bare-metal:** Install Redis separately, then set `REDIS_ENABLED=true` and `REDIS_HOST=localhost`.
|
||||
|
||||
**Multi-instance:** Use different `REDIS_KEY_PREFIX` values per instance to share one Redis without key collisions.
|
||||
|
||||
| Variable | Default | Description |
|
||||
| ---------------------------- | ----------- | ---------------------------------------------- |
|
||||
| `REDIS_ENABLED` | `false` | Enable Redis API response caching |
|
||||
| `REDIS_HOST` | `localhost` | Redis server host (`redis` in Docker) |
|
||||
| `REDIS_PORT` | `6379` | Redis server port |
|
||||
| `REDIS_DB` | `0` | Redis database number |
|
||||
| `REDIS_PASSWORD` | _(none)_ | Redis password (optional) |
|
||||
| `REDIS_KEY_PREFIX` | `hub` | Cache key prefix for multi-instance isolation |
|
||||
| `REDIS_CACHE_TTL` | `30` | Default cache TTL in seconds |
|
||||
| `REDIS_CACHE_TTL_DASHBOARD` | `30` | Cache TTL for dashboard endpoints in seconds |
|
||||
|
||||
### Web Dashboard Settings
|
||||
|
||||
| Variable | Default | Description |
|
||||
|
||||
Reference in New Issue
Block a user