## Purpose Provide a shared caching layer (Redis-backed) for ingestion and content processing flows, with TTL-based invalidation and manual cache clearing. ## ADDED Requirements ### Requirement: Redis-backed cache service The system MUST provide a Redis-backed cache service for use by ingestion and content processing flows. The cache service MUST be runnable in local development via Docker Compose. #### Scenario: Cache service available in Docker - **WHEN** the Docker Compose stack is started - **THEN** a Redis service is available to other services/scripts on the internal network ### Requirement: TTL-based invalidation Cached entries MUST support TTL-based invalidation. The system MUST define a default TTL and MUST allow overriding the TTL via environment/config. #### Scenario: Default TTL applies - **WHEN** a cached entry is written without an explicit TTL override - **THEN** it expires after the configured default TTL #### Scenario: TTL override applies - **WHEN** a TTL override is configured via environment/config - **THEN** new cached entries use that TTL for expiration ### Requirement: Cache key namespace Cache keys MUST be namespaced by source and parameters so that different data requests do not collide. #### Scenario: Two different sources do not collide - **WHEN** the system caches a YouTube fetch and a WordPress fetch - **THEN** they use different key namespaces and do not overwrite each other ### Requirement: Manual cache clear The system MUST provide a script/command to manually clear the cache. #### Scenario: Manual clear executed - **WHEN** a developer runs the cache clear command - **THEN** the cache is cleared and subsequent ingestion runs produce cache misses