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.