@amsom-habitat/nest-cache
v2.0.0
Published
Cache HTTP des GET (Redis ou mémoire), TTL par route, invalidation par tags après écriture.
Readme
@amsom-habitat/nest-cache
Cache HTTP des GET (clé = URL), Redis ou mémoire, fail-open (Redis en panne = cache-miss, jamais 500).
@CachedGet(ms)sur un contrôleur ou une route : met en cache ses GET, en-têteX-Cache: HIT|MISS, contourné parCache-Control/Pragma: no-cache|no-store. Chaque entrée est taguée du chemin du@Controller.@InvalidateCache(...chemins)sur un contrôleur d'écriture : après un POST/PUT/PATCH/DELETE réussi, purge les tags donnés avant d'envoyer la réponse (comme la v1).CacheService:get,set(key, value, { ttlMs, tags }),wrap(key, producer, { ttlMs, tags }),del,clear,invalidateTag(tag).- Une seule connexion Redis (entrées + index de tags en Sets, partagé entre répliques, expirant avec leurs entrées) ; Redis absent = cache-miss immédiat, reconnexion en arrière-plan.
HttpCacheModule.forRoot({ store: 'redis', redisUrl: 'redis://cally-redis:6379' })
HttpCacheModule.forRoot({ adminRoutes: { guard: AdminGuard } }) // POST /cache/clear, DELETE /cache?key=…|tag=…
HttpCacheModule.forRootAsync({ inject: [ConfigService], useFactory: (c) => ({ … }), adminRoutes: false })| Option | Défaut |
|---|---|
| store | CACHE_STORE (redis | memory), sinon mémoire ; autre valeur → erreur au démarrage |
| redisUrl | REDIS_URL, sinon redis://localhost:6379 |
| defaultTtlMs | 30 000 (entrée sans @CacheTTL) |
| adminRoutes | false ; { guard } expose les routes derrière ce guard |
Jamais de donnée nominative en cache : la clé ne varie pas selon l'utilisateur.
Migration 1.x → 2.0
| 1.x | 2.0 |
|---|---|
| @UseInterceptors(HttpCacheInterceptor) + @CacheTTL(ms) (@nestjs/cache-manager) | @CachedGet(ms) (les deux restent possibles) |
| @InvalideCache(...) / INVALIDE_CACHE | @InvalidateCache(...) / INVALIDATE_CACHE_KEY |
| OptionsCache / ttlMs / exposerRoutes | CacheOptions / defaultTtlMs / adminRoutes: false \| { guard } |
| routes /cache/* exposées par défaut | coupées par défaut |
| DELETE /cache/:key | DELETE /cache?key=… ou DELETE /cache?tag=… |
| cache.set(k, v, ttlMs, tags) / cache.wrap(k, f, ttlMs, tags) | cache.set(k, v, { ttlMs, tags }) / cache.wrap(k, f, { ttlMs, tags }) |
| cache.tagKey(...), instrumentKeyv, tagDeControleur, OPTIONS_CACHE, resoudreOptionsCache | internes, plus exportés |
| CACHE_MANAGER injectable | retiré ; passer par CacheService |
