Skillshub nestjs-caching
Multi-level caching, Invalidation patterns, and Stampede protection. Use when implementing multi-level caching or cache invalidation strategies in NestJS. (triggers: **/*.service.ts, **/*.interceptor.ts, CacheInterceptor, CacheTTL, Redis, stale-while-revalidate)
install
source · Clone the upstream repo
git clone https://github.com/ComeOnOliver/skillshub
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ComeOnOliver/skillshub "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/HoangNguyen0403/agent-skills-standard/nestjs-caching" ~/.claude/skills/comeonoliver-skillshub-nestjs-caching && rm -rf "$T"
manifest:
skills/HoangNguyen0403/agent-skills-standard/nestjs-caching/SKILL.mdsource content
Caching & Redis Standards
Priority: P1 (OPERATIONAL)
Caching strategies and Redis integration patterns for high-performance NestJS applications.
Caching Strategy
- Layering: Use Multi-Level Caching for high-traffic read endpoints.
- L1 (Local): In-Memory (Node.js heap). Ultra-fast, no network. Ideal for config/static data. Use
.lru-cache - L2 (Distributed): Redis. Shared across pods.
- L1 (Local): In-Memory (Node.js heap). Ultra-fast, no network. Ideal for config/static data. Use
- Pattern: Implement Stale-While-Revalidate where possible to avoid latency spikes during cache misses.
NestJS Implementation
-
Library: Use
withcache-manager
(Recommended overcache-manager-redis-yet
for better V4 support and stability).cache-manager-redis-store -
Interceptors: Use
for simple GET responses.@UseInterceptors(CacheInterceptor)- Warning: By default, this uses the URL as the key. Ensure consistent query param ordering or custom key generators.
-
Decorators: Standardize custom cache keys.
@CacheKey('users_list') @CacheTTL(300) // 5 minutes findAll() { ... }
Redis Data Structures (Expert)
- Don't just use
.GET/SET - Hash (
): Storing objects (User profiles). Allows partial updates (HSET
) without serialization overhead.HSET user:1 lastLogin result - Set (
): Unique collections (e.g., "Online User IDs"). O(1) membership checks.SADD - Sorted Set (
): Priority queues, Leaderboards, or Rate Limiting windows.ZADD
Invalidation Patterns
- Problem: "There are only two hard things in Computer Science: cache invalidation and naming things."
- Tagging: Since Redis doesn't support wildcards efficiently (
is O(N) - bans in PROD), use Sets to group keys.KEYS- Create:
SADD post:1:tags cache:post:1 - Invalidate: Fetch tags from Set, then
usage keys.DEL
- Create:
- Event-Driven: Listen to Domain Events (
) to trigger invalidation asynchronously.UserUpdated
Stampede Protection
- Jitter: Add random variance to TTLs (e.g., 300s ± 10s) to prevent all keys expiring simultaneously.
- Locking: If a key is missing, one process computes it while others wait or return stale. (Complex, often handled by
libraries).swr
Anti-Patterns
- No KEYS in production: Use SET-based tag grouping for cache invalidation; KEYS is 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 is not shared across pods.