Corp/docs/guides/CACHING_SETUP.md

44 lines
1.5 KiB
Markdown

# Caching
EUSRR uses Redis for Django cache and a separate Redis database for Channels and
Celery.
## Backend configuration
`backend/eusrr_backend/settings.py` configures the default cache as:
- URL: `redis://<REDIS_HOST>:<REDIS_PORT>/1`;
- key prefix: `eusrr_cache`;
- default TTL: 300 seconds.
The Channels layer uses Redis database 0. Celery URLs are configured separately
through `CELERY_BROKER_URL` and `CELERY_RESULT_BACKEND`.
`CacheControlMiddleware` adds `Cache-Control: private, max-age=60` to successful
HTML GET responses unless a view already set the header. API, admin, static and
media paths are excluded.
## Per-user page cache
`common.cache_decorators.cache_page_per_user` caches successful authenticated
GET responses by user, path and sorted query string and exposes `X-Cache` as
`HIT` or `MISS`. `invalidate_cache_pattern` removes keys using Redis pattern
deletion when supported.
Before applying the decorator, verify that the response is user-specific and
that every write path invalidates all affected keys. Do not cache permission
decisions or responses containing another user's data under a shared key.
## Diagnostics
```bash
redis-cli -n 1 scan 0 match 'eusrr_cache:*' count 100
```
Use `cache.clear()` from Django shell for a development reset. Do not use
`FLUSHDB` in a shared Redis instance.
Frontend request state is independent from Django cache. The Next.js application
uses its own component/context state; the legacy Django UI still contains a
`static/js/managers/dataManager.js` cache.