What problem does it solve? Caching results of effectful operations (API calls, database reads, connection acquisition) in Effect TypeScript applications requires handling TTL expiry, LRU eviction, concurrent request deduplication, failure caching, and resource lifecycle — all of which are easy to get wrong with ad-hoc memoization. ## Core Features & Use Cases - Keyed caching with Cache: Memoize effectful lookups by key with capacity limits, LRU eviction, fixed or exit-aware TTL, and automatic deduplication of concurrent lookups for the same key. - Resource-owning entries with ScopedCache: Cache values that own resources (connections, file handles) with per-entry scopes so finalizers run exactly on eviction, expiry, invalidation, or cache close. - Refresh and invalidation control: Use stale-while-revalidate refresh, write-through set, and conditional invalidation to keep cached data fresh. - Use Case: Build a cached user repository service via Layer where lookups hit a database, successes cache for 5 minutes, failures cache for zero seconds, and write-through updates keep the cache consistent. ## Quick Start Ask the assistant to add TTL-based caching with concurrent deduplication to an Effect lookup function using Cache.makeWith.