SuperAPI AI Directory

nestjs-caching

General & other

View repository

Updated 10-15 22:13

About this skill

Caching & Redis Standards

Priority: P1 (HIGH)

Caching Strategy

  • Layering: Use Multi-Level Caching for high-traffic read endpoints.
  • L1 (Local): In-Memory (Node.js heap). Ultra-fast, no network. Use lru-cache for config/static data.
  • L2 (Distributed): Redis. Shared across pods.
  • Pattern: Implement Stale-While-Revalidate to avoid latency spikes during cache misses.

NestJS Implementation

  • Library: Use cache-manager with cache-manager-redis-yet (recommended over cache-manager-redis-store for V4 stability).
  • Interceptors: Use @UseInterceptors(CacheInterceptor) for simple GET responses.
  • Warning: Default key URL. Ensure consistent query param ordering or use custom key generators.

See implementation examples

Stampede Protection

  • Jitter: Add random variance to TTLs to prevent simultaneous expiry across keys.
  • Locking: One process recomputes while others wait or return stale data.

See implementation examples

Redis Data Structures

  • Hash (HSET): Store objects (user profiles) with partial update support.
  • Set (SADD): Unique collections with O(1) membership checks.
  • Sorted Set (ZADD): Priority queues, leaderboards, rate-limiting windows.

Invalidation Patterns

  • Tagging: Use Sets to group cache keys (avoid KEYS which O(N) in production).
  • Create: SADD post:1:tags cache:post:1
  • Invalidate: Fetch tags from Set, then DEL grouped keys.
  • Event-Driven: Listen to domain events (UserUpdated) to trigger invalidation asynchronously.

Anti-Patterns

  • No KEYS in production: Use SET-based tag grouping for cache invalidation; KEYS O(N).
  • No fixed TTLs on grouped caches: Add jitter (±10s) to prevent simultaneous stampede.
  • No MemoryStorage for multi-pod: Use Redis store; in-memory cache not shared across pods.