Agent-skills-standard nestjs-caching
Implement multi-level caching, invalidation patterns, and stampede protection in NestJS. Use when adding Redis caching layers, configuring cache-manager interceptors, implementing stale-while-revalidate, or preventing cache stampedes in NestJS services. (triggers: **/*.service.ts, **/*.interceptor.ts, CacheInterceptor, CacheTTL, Redis, stale-while-revalidate)
install
source · Clone the upstream repo
git clone https://github.com/HoangNguyen0403/agent-skills-standard
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/HoangNguyen0403/agent-skills-standard "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/nestjs/nestjs-caching" ~/.claude/skills/hoangnguyen0403-agent-skills-standard-nestjs-caching && rm -rf "$T"
manifest:
skills/nestjs/nestjs-caching/SKILL.mdsource content
Caching & Redis Standards
Priority: P1 (OPERATIONAL)
Caching Strategy
- Layering: Use Multi-Level Caching for high-traffic read endpoints.
- L1 (Local): In-Memory (Node.js heap). Ultra-fast, no network. Use
for config/static data.lru-cache - L2 (Distributed): Redis. Shared across pods.
- Pattern: Implement Stale-While-Revalidate to avoid latency spikes during cache misses.
NestJS Implementation
- Library: Use
withcache-manager
(recommended overcache-manager-redis-yet
for V4 stability).cache-manager-redis-store - Interceptors: Use
for simple GET responses.@UseInterceptors(CacheInterceptor) - Warning: Default key URL. Ensure consistent query param ordering or use custom key generators.
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.
Redis Data Structures
- Hash (
): Store objects (user profiles) with partial update support.HSET - Set (
): Unique collections with O(1) membership checks.SADD - Sorted Set (
): Priority queues, leaderboards, rate-limiting windows.ZADD
Invalidation Patterns
- Tagging: Use Sets to group cache keys (avoid
which O(N) in production).KEYS - Create:
SADD post:1:tags cache:post:1 - Invalidate: Fetch tags from Set, then
grouped keys.DEL - Event-Driven: Listen to domain events (
) to trigger invalidation asynchronously.UserUpdated
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.