stats
🧠 O que é
stats retorna métrica de uso do cache: quantidade de hits, misses, stale hits, entries e promises pendentes.
❓ Por que existe
Para monitorar e debugar a efetividade do cache em produção.
✅ Quando usar
- Monitoring/logging periódico.
- Debug: por que cache não está ajudando?
- Alertas: muitos misses? TTL errado? Chaves erradas?
🚫 Quando NÃO usar
- Em produção sem estrutura de logging.
⚡ Exemplo mínimo funcional
const cache = new Cache<number>();
cache.set("a", 1);
cache.get("a"); // hit
cache.get("b"); // miss
console.log(cache.stats());
// { hits: 1, misses: 1, staleHits: 0, pending: 0, size: 1 }
🧩 Exemplo real de produção
const cache = new Cache<any>({ defaultTTL: 30_000 });
// Log stats a cada minuto
setInterval(() => {
const stats = cache.stats();
const hitRate = stats.hits / (stats.hits + stats.misses) * 100 || 0;
console.log({
hitRate: `${hitRate.toFixed(1)}%`,
hits: stats.hits,
misses: stats.misses,
staleHits: stats.staleHits,
pending: stats.pending,
size: stats.size,
});
}, 60_000);
// Alertar se hit rate muito baixo
if (hitRate < 30) {
console.warn("⚠️ Cache hit rate baixo! Revisar TTL ou chaves");
}
⚠️ Erros comuns
1. Assumir que hits/misses são filtrados por prefixo
❌ Errado:
const stats = cache.stats("user:");
// stats.hits refere-se a TODOS os hits, não apenas "user:..."
✅ Correto:
const stats = cache.stats("user:");
// stats.pending e stats.size SÃO filtrados por prefixo
// Mais hits/misses são globais
💡 Boas práticas
- Logie stats regularmente:
setInterval(() => {
console.log("Cache Stats:", cache.stats());
}, 60_000);
- Use
statspara diagnosticar problemas:
// Se misses muito alto:
// - TTL muito baixo?
// - Chave muda demais entre chamadas?
const stats = cache.stats();
if (stats.misses > stats.hits * 2) {
console.warn("Muitos misses! Revisar arquitetura");
}
Ver também
- Cache - Classe principal