- Create app/core/redis.py with global get_redis() singleton
- Replace 4 independent Redis connections:
- cache.py: use get_redis() instead of own aioredis.from_url
- dispatcher.py: use get_redis() instead of own connection
- health_checker.py: use get_redis() instead of per-check connection
- rate_limit.py: RedisRateLimitBackend uses get_redis() instead of own connection
- Replace main.py readiness endpoint to use get_redis()
- Add close_redis() in FastAPI lifespan shutdown
- Remove unused aioredis imports from health_checker.py and main.py