Aller au contenu principal

Stratégie de Cache

Pour réduire la charge sur la base de données et améliorer les temps de réponse, nous implémentons le cache à plusieurs niveaux.

1. Cache Applicatif (Redis)

Nous utilisons un service wrapper CacheService pour gérer les opérations GET/SET avec des clés standardisées.

Utilisation

Nous privilégions le pattern Get-Or-Set :

const stats = await CacheService.remember(
`stats:camera:${id}`, // Clé
60, // TTL (Secondes)
async () => await StatsService.compute(id), // Calcul (exécuté uniquement si miss)
);

2. Invalidation

Quand les données changent (ex: un utilisateur met à jour son profil), nous devons nettoyer le cache obsolète. Nous utilisons CacheInvalidationService qui supporte la Suppression Wildcard (Scan des clés Redis).

// Quand une caméra est mise à jour
await CacheInvalidationService.clear(`stats:camera:${camera.id}:*`);

3. Cache HTTP

Pour les ressources statiques ou les réponses API hautement cachables, nous attachons des headers ETag ou Cache-Control via le middleware metrics.